div 2 890 c

#include
using namespace std ;
using ll = long long;
using PII = pair;
//using = pair;
using VI = vector;
const int mod = 100003;
const int limit = 30000;
int k,n;
VI a(1010);

int check(int x,int h){
    int ct = k;
    while (x<=n){
        if(a[x] >=h)return 1;
        ct -= h - a[x];
        x++,h--;
        if(ct < 0)return 0;
    }

    return 0;

}
void solve(){

    cin>>n>>k;
    int res = 0;
    for(int i=1;i<=n;i++)  cin>>a[i];
    for(int i=1;i<=n;i++){
        int left = a[i],right = 1e9;
        while(left < right){
            int mid = (left + right + 1) >>1;
            if(check(i,mid)) left = mid;
            else right = mid - 1;
        }
        res = max(res,left);

    }

    cout<>t;
    while (t--){
        solve();
    }
}

假设ai 是最后最大的那个数,二分一个高度,

如果 ai最终是h  那么ai+n 的高度就为 h - n

————————————————————————

你可能感兴趣的:(基本算法,算法,c++,数据结构)