#7 WA 求条
查看原帖
#7 WA 求条
724190
zhouyoyo楼主2024/10/14 10:33
#include <iostream>
using namespace std;
#define mid ((l+r)>>1)
#define Mid ((s+t)>>1)

const int NR=2e5+5;
int n,q,l[NR],r[NR],op[NR],a[NR],ax[NR],g[NR],K,x,bb[NR];

int T[NR<<2],b[NR<<2];
void build(int p,int l,int r,int k)
{
	if(l==r) {if(k==0) T[p]=a[l]>=x; else T[p]=a[l]<=x;  b[p]=-1; return;}
	build(p<<1,l,mid,k); build(p<<1|1,mid+1,r,k); T[p]=T[p<<1]+T[p<<1|1]; b[p]=-1;
}
void pushdown(int p,int l,int r)
{
	T[p<<1]=b[p]*(mid-l+1); T[p<<1|1]=b[p]*(r-mid); b[p<<1]=b[p<<1|1]=b[p]; b[p]=-1;
}
void update(int l,int r,int s,int t,int p,int g)
{
	if(l<=s&&t<=r) { T[p]=g*(t-s+1); b[p]=g;return; } 
	if(b[p]!=-1) pushdown(p,s,t); 
	if(l<=Mid)update(l,r,s,Mid,p<<1,g); if(r>Mid)update(l,r,Mid+1,t,p<<1|1,g); T[p]=T[p<<1]+T[p<<1|1];
}
int query(int l,int r,int s,int t,int p)
{
	if(l<=s&&t<=r) 
	{
		return T[p];
	}
	if(b[p]!=-1) pushdown(p,s,t);
	int ret=0; if(l<=Mid) ret+=query(l,r,s,Mid,p<<1); if(r>Mid) ret+=query(l,r,Mid+1,t,p<<1|1);
	return ret;
}
int main()
{
	cin>>n>>q>>x;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	x=a[x];
	for(int i=1;i<=q;i++)
	{
		cin>>op[i]>>l[i]>>r[i]; op[i]--;
	}
	for(int round=0;round<2;round++)
	{
		build(1,1,n,round);
		for(int i=1;i<=q;i++)
		{
			int cnt1=query(l[i],r[i],1,n,1);
			if(op[i]==0&&round==0)
			{
				if(cnt1) update(r[i]-cnt1+1,r[i],1,n,1,1);
				if(cnt1<r[i]-l[i]+1) update(l[i],r[i]-cnt1,1,n,1,0);
			}
			if(op[i]==1&&round==0)
			{
				if(cnt1) update(l[i],l[i]+cnt1-1,1,n,1,1);
				if(cnt1<r[i]-l[i]+1) update(l[i]+cnt1,r[i],1,n,1,0);
			}
			if(op[i]==0&&round==1)
			{
				if(cnt1) update(l[i],l[i]+cnt1-1,1,n,1,1);
				if(cnt1<r[i]-l[i]+1) update(l[i]+cnt1,r[i],1,n,1,0);
			}
			if(op[i]==1&&round==1)
			{
				if(cnt1) update(r[i]-cnt1+1,r[i],1,n,1,1);
				if(cnt1<r[i]-l[i]+1) update(l[i],r[i]-cnt1,1,n,1,0);
			}
		}
		for(int i=1;i<=n;i++) 
		{
			if(query(i,i,1,n,1)==1) 
			
			bb[i]++; 
		}
	}
	for(int i=1;i<=n;i++) if(bb[i]==2) 
	{
		cout<<i; break;
	}
	return 0;
}
/*











*/
2024/10/14 10:33
加载中...