0
点赞
收藏
分享

微信扫一扫

Monster Tower (堆 二分

禾木瞎写 2022-04-14 阅读 37

添加链接描述

#include<bits/stdc++.h>
using namespace std;
#define int long long 
const int N=2e5+9;
int arr[N];
 int n,k;
 priority_queue<int,vector<int>,greater<int>> q;
int kill(int mid){
    while(q.size()){
        int x=q.top();
        q.pop();
        if(mid>=x)mid+=x;
        else {
            q.push(x);
            return mid;
        }
    }
    return mid;
}
bool check(int mid){
    while(q.size())q.pop();
    for(int i=1;i<=k;i++){
        q.push(arr[i]);
    }
    for(int i=k+1;i<=n;i++){
        int nx=kill(mid);
        if(q.size()>=k)return 0;
        else q.push(arr[i]),mid=nx;
       
    }
    int nx=kill(mid);
    if(q.size())return 0;
    return 1;
}
signed main(){
    std::ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int T;
    cin>>T;
    while(T--){
        cin>>n>>k;
        for(int i=1;i<=n;i++){
            cin>>arr[i];
        }
        int l=0,r=1e9;
        while(l<r){
            int mid=l+r>>1;
            if(check(mid))r=mid;
            else l=mid+1;
        }

        cout<<l<<"\n";
    }

    return 0;
}
举报

相关推荐

0 条评论