不知道为啥 WA on 9,感觉写的没啥问题/kel,求巨佬看看/kk
#include<bits/stdc++.h>
using namespace std;
const int M=1e6+10;
struct change
{
int p,c;
}C[M];int cnt1;
struct query
{
int l,r,t,id,ans;
}Q[M];int cnt2;
int n,q,t,bl,a[M],p[M],ans;
int id(int k){return k/bl;}
bool cmp1(query a,query b)
{return id(a.l)<id(b.l)||(id(a.l)==id(b.l)&&id(a.r)<id(b.r))||(id(a.l)&&id(b.l)&&id(a.r)==id(b.r)&&id(a.t)<id(b.t));}
bool cmp2(query a,query b){return a.id<b.id;}
void add(int k)
{
if (p[k]==0)ans++;
p[k]++;
}
void del(int k)
{
if (p[k]==1)ans--;
p[k]--;
}
void upd(int p,int t)
{
if (C[t].p<=Q[p].r&&C[t].p>=Q[p].l)
del(a[C[t].p]),add(C[t].c);
swap(a[C[t].p],C[t].c);
}
int main()
{
cin>>n>>q;
for (int i=1;i<=n;i++)cin>>a[i];
bl=pow(n,0.666666);
for (int i=1;i<=q;i++)
{
char ch;scanf("%s",&ch);
if (ch=='Q')
{
cnt2++;
cin>>Q[cnt2].l>>Q[cnt2].r;Q[cnt2].id=i,Q[cnt2].t=cnt1;
}
else
{
cnt1++;
cin>>C[cnt1].p>>C[cnt1].c;
}
}
sort(Q+1,Q+cnt2+1,cmp1);
int l=1,r=0,now=0;
for (int i=1;i<=cnt2;i++)
{
while(l>Q[i].l)l--,add(a[l]);
while(l<Q[i].l)del(a[l]),l++;
while(r>Q[i].r)del(a[r]),r--;
while(r<Q[i].r)r++,add(a[r]);
while(now<Q[i].t)now++,upd(i,now);
while(now>Q[i].t)upd(i,now),now--;
Q[i].ans=ans;
}
sort(Q+1,Q+1+cnt2,cmp2);
for (int i=1;i<=cnt2;i++)cout<<Q[i].ans<<endl;
return 0;
}