#5WA,80,求大佬调
查看原帖
#5WA,80,求大佬调
1236674
flowercode楼主2024/7/21 22:01
#include<iostream>
using namespace std;
#define ll long long
const int N =1e5+6;
int n,m;
ll arr[N] , res[N];
int bs(int l,int r,int key){
    while(l<r){
        int mid = l+r+1>>1;
        if(res[mid] <= key) l = mid;
            else r = mid - 1;
    }
    return l;
}
bool check(int mid){
    int temp = bs(0,n-1,mid);
    if(temp>=n-1)return false;
    int x = m-2;
    if(x>0){      
        while(x--){
            int y = mid + res[temp];
            temp = bs(temp+1,n-1,y);
            if(temp >= n-1)return false;
        }
    }
    if(res[n-1]-res[temp] > mid) return true;
    else return false;
}
int main(){
    int maxm = 0;
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;++i)
    {
        scanf("%d",&arr[i]);
        if(maxm<arr[i])maxm = arr[i]; 
    }
    res[0] = arr [0];
    for(int i=1;i<n;++i)res[i] = res[i-1]+arr[i];
    int l = maxm, r = res[n-1];
    while(l<r){
        int mid =(l+r)/2;
        if(check(mid)) l =mid+1;
        else r = mid;
    }
    cout<<l;
}
2024/7/21 22:01
加载中...