Wa+TLE求助
查看原帖
Wa+TLE求助
217634
anonymous217楼主2023/10/9 16:08
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5; 
int ans[N],n,m,k;char ch;
int c[N],s[N],T,sum,t1,t2;
int ul[N],uv[N];
struct node
{
	int l,r,id,up;
}opr[N];
bool cmp(node a,node b)
{
	if(a.l/T==b.l/T)return a.r<b.r;
	return a.l<b.l;
}
void Delete(int val)
{
	c[s[val]]--;
	if(c[s[val]]==0)sum--;
}
void Insert(int val)
{
	if(c[s[val]]==0)sum++;
	c[s[val]]++;
}
void Upd(int x,int l,int r)
{
    if(l<=x&&x<=r)Delete(ul[x]);
    swap(uv[x],s[x]);
    if(l<=x&&x<=r)Insert(ul[x]);
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
	cin>>n>>m;T=sqrt(n);
	for(int i=1;i<=n;i++)cin>>s[i];
	for(int i=1;i<=m;i++)
	{
        cin>>ch;
        if(ch=='Q'){
            opr[++t1].id=t1;opr[t1].up=t2;
            cin>>opr[t1].l>>opr[t1].r;
        }
		else
            cin>>ul[++t2]>>uv[t2];
	}
	sort(opr+1,opr+t1+1,cmp);
	int dx=1,dy=0,dq=0;
	for(int i=1;i<=t1;i++)
	{
		int qx=opr[i].l,qy=opr[i].r,qp=opr[i].up;
		while(dq<qp){Upd(++dq,qx,qy);}
		while(dx>qx){Insert(--dx);}
		while(dy<qy){Insert(++dy);}
		while(dq>qp){Upd(dq--,qx,qy);}
		while(dx<qx){Delete(dx++);}
		while(dy>qy){Delete(dy--);}
		ans[opr[i].id]=sum;
	}
	for(int i=1;i<=t1;i++)cout<<ans[i]<<"\n";
}
2023/10/9 16:08
加载中...