记录编号 601914 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 1901.[国家集训队2011]数颜色 最终得分 100
用户昵称 Gravatar郑霁桓 是否通过 通过
代码语言 C++ 运行时间 0.999 s
提交时间 2025-06-29 12:12:44 内存使用 7.53 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
string ss;
int n,m,a[133335],xx,yy,l,r,p[1000005];
int qs,ts,as[133335],tq[133335];
int x[133335],y[133335],z[133335],tt;
struct qq{
    int x,y,t;
}q[133335];
bool c(qq x,qq y){
    if(x.x/2609==y.x/2609){
        if(x.y/2609==y.y/2609){
            return x.t<y.t;
        }
        return x.y<y.y;
    }
    return x.x<y.x;
}
int main(){
	freopen("nt2011_color.in","r",stdin);
	freopen("nt2011_color.out","w",stdout);
    ios::sync_with_stdio(false);
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=m;i++){
        cin>>ss>>xx>>yy;
        if(ss[0]=='Q') q[++qs].x=xx,q[qs].y=yy,q[qs].t=i,tq[i]=1;
        else x[i]=xx,y[i]=yy;
    }
    sort(q+1,q+qs+1,c);
    l=q[1].x,r=l-1;
    for(int i=1;i<=qs;i++){
        while(q[i].x<l) if(!(p[a[--l]]++)) ts++;
	    while(q[i].y>r) if(!(p[a[++r]]++)) ts++;
	    while(q[i].x>l) if(!(--p[a[l++]])) ts--;
	    while(q[i].y<r) if(!(--p[a[r--]])) ts--;
		while(q[i].t>tt){
       		tt++;
       		if(tq[tt]) continue;
            if(q[i].x<=x[tt]&&x[tt]<=q[i].y&&!--p[a[x[tt]]]) ts--;
            if(q[i].x<=x[tt]&&x[tt]<=q[i].y&&!p[y[tt]]++) ts++;
       		z[tt]=a[x[tt]];
       		a[x[tt]]=y[tt];
	   	}
        while(q[i].t<tt){
       		tt--;
       		if(tq[tt]) continue;
            if(q[i].x<=x[tt]&&x[tt]<=q[i].y&&!--p[a[x[tt]]]) ts--;
            if(q[i].x<=x[tt]&&x[tt]<=q[i].y&&!p[z[tt]]++) ts++;
       		a[x[tt]]=z[tt];
	   	}
        as[q[i].t]=ts;
    }
    for(int i=1;i<=m;i++) if(tq[i]) cout<<as[i]<<"\n";
    return 0;
}