#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;
else
l=m+1;
}
printf("%d\n",l);
}
}
LA 4254 二分
最新推荐文章于 2020-06-05 15:59:21 发布