POJ1201求调
查看原帖
POJ1201求调
678881
Vocaloid世末歌者楼主2023/12/3 15:43

WA。

#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
long long n,T,sum,m;
struct as
{
	long long a,b,c;
}x[51000];
bool a[200000];
struct tree
{
	long long l,r,sum;
}t[200000];
void p_u_(long long u)
{
	t[u].sum=t[u<<1].sum+t[u<<1|1].sum;
}
void b_(long long u,long long l,long long r)
{
	t[u].l=l,t[u].r=r;
	if(l==r)
	{
		t[u].sum=1;
		return;
	}
	long long mid=l+r>>1;
	b_(u<<1,l,mid);
	b_(u<<1|1,mid+1,r);
	p_u_(u);
}
long long q_(long long u,long long l,long long r)
{
	if(a[n])return 0;
	if(l==t[u].l&&r==t[u].r)return t[u].sum;
	long long mid=(t[u].l+t[u].r)>>1;
	if(r<=mid)return q_(u<<1,l,r);
	else
	{
		if(l>mid)return q_(u<<1|1,l,r);
		else
		{
			return q_(u<<1,l,mid)+q_(u<<1|1,mid+1,r);
		}
	}
}
void ud1(long long n,long long be,long long en)
{
	if(be==t[n].l&&en==t[n].r)
	{
		a[n]=1;
		t[n].sum=0;
		return;
	}
	long long mid=t[n].l+t[n].r>>1;
	if(en<=mid)ud1(n<<1,be,en);
	else
	{
		if(be>mid)ud1(n<<1|1,be,en);
		else
		{
			ud1(n<<1,be,mid);
			ud1(n<<1|1,mid+1,en);
		}
	}
	p_u_(n);
}
void u_d_(long long n,long long be,long long en,long long c)
{
	if(t[n].l==be&&t[n].r==en&&c==t[n].sum)
	{
		a[n]=1;
		t[n].sum=0;
		return;
	}
	long long mid=(t[n].l+t[n].r)>>1;
	if(en<=mid)u_d_(n<<1,be,en,c);
	else
	{
		if(be>mid)u_d_(n<<1|1,be,en,c);
		else
		{
			long long ss=q_(n,mid+1,en);
			if(ss>=c)u_d_(n<<1|1,mid+1,en,c);
			else ud1(n<<1|1,mid+1,en),u_d_(n<<1,be,mid,c-ss);
		}
	}
	p_u_(n);
}
bool cmp(as x,as y)
{
	return x.b<y.b;
}
int main()
{
	cin>>n;
	b_(1,0,50000);
	for(long long i=1;i<=n;i++)cin>>x[i].a>>x[i].b>>x[i].c;
	sort(x+1,x+n+1,cmp);
	for(long long i=1;i<=n;i++)
	{
		long long tt=q_(1,x[i].a,x[i].b);
		tt=x[i].b-x[i].a+1-tt;
		if(tt<x[i].c)
		{
			u_d_(1,x[i].a,x[i].b,x[i].c-tt);
		}
	}
	cout<<50001-q_(1,0,50000)<<endl;
	return 0;
}
2023/12/3 15:43
加载中...