#题解_Codeforces Round 1003 (Div. 4)_C2. Skibidus and Fanum Tax (hard version)
C2. Skibidus and Fanum Tax (hard version)<-传送门
中文题面如下

思路与简单版本差不多,不同于简单版本,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" ;
}

浙公网安备 33010602011771号