LA 4254 二分

来源:互联网 发布:for循环遍历json 编辑:程序博客网 时间:2024/05/18 02:49
#include<cstdio>#include<cstring>#include<queue>#include<algorithm>#define INF 0x3f3f3f3f#define MAX(x,y) ((x)>(y)?(x):(y))#define MIN(x,y) ((x)>(y)?(y):(x))using namespace std;struct node{int l,r,w;}d[100100];int L,R,n;bool operator<(node a,node b){return a.r>b.r;}bool cmp(const node &a,const node &b){return a.l<b.l;}int ok(int v){int tot=0; priority_queue<node>q; for(int i=L;i<=R;i++)     {     int tem=v;     while(tot!=n&&d[tot].l<i)     q.push(d[tot++]);     while(!q.empty()&&tem!=0)     {     node u=q.top();     q.pop();     if(u.r<i)     return 0;     if(u.w>tem)     {     u.w-=tem;     tem=0;     q.push(u); } else tem-=u.w; } } if(!q.empty()) return 0; else return 1;}int main(){int T ;scanf("%d",&T);while(T--){int l=1,r=0;scanf("%d",&n);R=0;L=INF;for(int i=0;i<n;i++){scanf("%d%d%d",&d[i].l,&d[i].r,&d[i].w);R=MAX(R,d[i].r);L=MIN(L,d[i].l);r+=d[i].w;}sort(d,d+n,cmp);while(l<r){int m=(l+r)>>1;if(ok(m))r=m;elsel=m+1;}printf("%d\n",l);}}