全RE求助
查看原帖
全RE求助
379420
Xuejiama1227楼主2023/2/8 17:55
#include<bits/stdc++.h>
using namespace std;
const int N=133340;
int n,k,cnt[N],a[N],num=0;
int ans[N];
struct query{
	int id,l,r,t;
}q[N];
struct update{
	int pl,pre,suc;
}p[N];
inline bool cmp(query x,query y){
	if((x.l/k)>(y.l/k))return 0;
	if((x.l/k)<(y.l/k))return 1;
	if((x.r/k)>(y.r/k))return 0;
	if((x.r/k)<(y.r/k))return 1;
	return x.t<y.t;
}
inline void add(int x){if(++cnt[a[x]]==1)num++;}
inline void del(int x){if(--cnt[a[x]]==0)num--;}
int main(){
	int m,i,ln=0,tn=0,cl=0,cr=0,ct=0,l,r,t;
	char op;
	scanf("%d%d",&n,&m);
	k=sqrt(n);
	for(i=1;i<=n;i++)scanf("%d",a+i);
	for(i=1;i<=m;i++){
		cin>>op;
		scanf("%d%d",&l,&r);
		if(op=='R'){
			tn++;
			p[tn].pl=l;
			p[tn].suc=r;
			p[tn].pre=a[p[tn].pl];
			a[p[tn].pl]=r;
		}else{
			ln++;
			q[ln].id=ln;
			q[ln].l=l;
			q[ln].r=r;
			q[ln].t=tn;
		}
	}
	for(i=tn;i>=1;i--)a[p[i].pl]=p[i].pre;
	sort(q+1,q+ln+1,cmp);
	for(i=1;i<=m;i++){
		l=q[i].l;r=q[i].r;t=q[i].t;
		while(cl<l)del(cl++);
		while(cl>l)add(--cl);
		while(cr<r)add(++cr);
		while(cr>r)del(cr--);
		while(ct<t){
			ct++;
			if(l<=p[ct].pl&&p[ct].pl<=r)del(p[ct].pl);
			a[p[ct].pl]=p[ct].suc;
			if(l<=p[ct].pl&&p[ct].pl<=r)add(p[ct].pl);
		}
		while(ct>t){
			if(l<=p[ct].pl&&p[ct].pl<=r)del(p[ct].pl);
			a[p[ct].pl]=p[ct].pre;
			if(l<=p[ct].pl&&p[ct].pl<=r)add(p[ct].pl);
			ct--;
		}
		ans[q[i].id]=num;
	}
	for(i=1;i<=ln;i++)printf("%d\n",ans[i]);
	return 0;
}
2023/2/8 17:55
加载中...