UvaLive-4254-Processor

来源:互联网 发布:mac怎么装正版office 编辑:程序博客网 时间:2024/05/30 22:44

用二分法可以做~

代码:

#include<cstdio>#include<queue>#include<iostream>#include<algorithm>#include<queue>using namespace std;struct node{    int l,r,w;    bool operator < (const node &a)const    {return r>a.r;    }}a[10001];int n;priority_queue<node> q;bool cmp(node a,node b){    return a.l<b.l;}bool check(int mid){    int i=0,j=0;    while(!q.empty()) q.pop();    while(1)    {while(i<n&&a[i].l<=j) q.push(a[i++]);int now=mid;while(now!=0&&!q.empty()){    node ita=q.top();    q.pop();    int m=min(now,ita.w);    now-=m;    ita.w-=m;    if(ita.w!=0)q.push(ita);}j++;if(!q.empty()&&q.top().r<=j)    return false;if(q.empty()&&i==n)    return true;    }}int main(){    int cas;    scanf("%d",&cas);    while(cas--)    {scanf("%d",&n);int sum=0;for(int i=0;i<n;i++){    scanf("%d%d%d",&a[i].l,&a[i].r,&a[i].w);    sum+=a[i].w;}sort(a,a+n,cmp);int l=0,r=sum,ans=sum;while(l<=r){    int mid=(l+r)>>1;    if(check(mid))    {ans=mid;r=mid-1;    }    elsel=mid+1;}printf("%d\n",ans);    }    return 0;}


原创粉丝点击