Avatar
“”

一个兴趣使然的追梦人

▼

#题解_Codeforces Round 1003 (Div. 4)_C2. Skibidus and Fanum Tax (hard version)

C2. Skibidus and Fanum Tax (hard version)<-传送门

中文题面如下

image

思路与简单版本差不多,不同于简单版本,hard版本的m无限制,m小于等于2×10^5,

这个版本多了一个对b数组升序排序,方便后面用二分,这题在选择bi去更改ai的时候需要用二分,去找第一个大于等于ai+a(i+1)的数,然后去像easy版本一样去判断就好了
\(ACcode\)

void solve() {
 int n,m ;
 cin >> n >> m ;
 vector<int>a(n),b(m) ;
 for(int i = 0 ;i < n;i++){
    cin >> a[i] ;
 }
 for(int j = 0;j < m;j++){
    cin >> b[j] ;
 }
 sort(b.begin(),b.end()) ;
 a[0] = min(a[0],b[0] - a[0]) ;
 for(int i = 1;i < n;i++){
    int mmx = 1e11 ;
    if(a[i] >= a[i - 1]){
        mmx = min(mmx,a[i]) ;
    }
    auto it = lower_bound(b.begin(),b.end(),a[i - 1] + a[i]) ;
    if(it != b.end()){
        mmx = min(mmx,*it - a[i]) ;
    }
    if(mmx == 1e11){
        cout << "NO" << "\n" ;
        return ;
    }
    a[i] = mmx ;
 }
 cout << "YES" << "\n" ;
}
posted @ 2026-09-28 14:30  hermanO  阅读(9)  评论(0)    收藏  举报