记录编号 313741 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [国家集训队2011]数颜色 最终得分 100
用户昵称 GravatarGo灬Fire 是否通过 通过
代码语言 C++ 运行时间 0.792 s
提交时间 2016-10-02 06:27:17 内存使用 4.68 MiB
显示代码纯文本
#include<cmath>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
using namespace std;
const int maxn=100000;
int b[maxn],num[1050000],n,m;
void Init();

int main(){
	freopen("nt2011_color.in","r",stdin);
	freopen("nt2011_color.out","w",stdout);
    Init();
    //system("pause");
    return 0;
}
void Init(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%d",&b[i]);
	}
	int l=1,r=1,tot=1;num[b[1]]=1;
	for(int i=1;i<=m;i++){
		char ch;int L,R,X,Y;
		scanf(" %c",&ch);
		if(ch=='Q'){
			scanf("%d%d",&L,&R);
			while(l<L){
				num[b[l]]--;
				if(num[b[l]]==0)tot--;
				l++;
			}
			while(l>L){
				l--;num[b[l]]++;
				if(num[b[l]]==1)tot++;
			}
			while(r>R){
				num[b[r]]--;
				if(num[b[r]]==0)tot--;
				r--;
			}
			while(r<R){
				r++;num[b[r]]++;
				if(num[b[r]]==1)tot++;
			}
			printf("%d\n",tot);
		}
		else {
			scanf("%d%d",&X,&Y);
			if(l<=X && r>=X){
				num[b[X]]--;
				if(num[b[X]]==0)tot--;
				if(++num[Y]==1)tot++;
				b[X]=Y;
			}
			else b[X]=Y;
		}
	}
}