@[apiad](/user/1251532) 你为什么有三个 add 一个 del/yun
by Pt_crN @ 2024-03-06 21:22:54
@[Pt_crN](/user/740322) 谢谢,有点唐氏了。已关
by apiad @ 2024-03-06 21:32:20
@[Pt_crN](/user/740322)
```cpp
// Author: gsczl71
// Copyright (c) 2024 gsczl71 All rights reserved.
#include<bits/stdc++.h>
#define ll long long
#define i128 __int128
#define ull unsigned long long
#define pii pair<int,int>
#define pll pair<long long, long long>
#define fs first
#define sc second
#define endl '\n'
#define debug puts("AK IOI")
#define re register
#define pb push_back
#define mem(a,x) memset((a),(x),sizeof(a))
#define vi vector<int>
#define pq priority_queue
using namespace std;
#define int long long
const int mod = 1e9+7;
//const int mod = 998244353;
const int inf = 0x3f3f3f3f,N = 133333+5,M = 1e6+5,K = 3000+5;
const long long linf = 0x3f3f3f3f3f3f3f3f;
int n,m;
int len ;//块长
int a[N];
struct query{
int id,delid,l,r;
}q[N];
struct del{
int id,x;
}d[N];
int qn,dn;
int id[N];
bool cmp(query a,query b){
if(id[a.l] != id[b.l]) return id[a.l] < id[b.l];//左端点排序
if(id[a.r] != id[b.r]) return id[a.r] < id[b.r];//右端点排序
return a.delid < b.delid;//按照时间戳排序
}int cnt[N],now;
int ans[N];
void add(int x){if(!(cnt[x]++)) now++;}
void dl(int x){if(!(--cnt[x])) now--;}
void md(){
for(int i = 1;i <= n;i++) id[i] = (i-1)/len + 1;
sort(q+1,q+1+qn,cmp);
int l=1,r=0,tim=0;
for(int i = 1;i <= n;i++){
while(r>q[i].r) dl(a[r--]);
while(r<q[i].r) add(a[++r]);
while(l>q[i].l) add(a[--l]);
while(l<q[i].l) dl(a[l++]);
while(tim<q[i].delid){
tim++;
if(d[tim].id >= l && d[tim].id <= r){
add(d[tim].x);
dl(a[d[tim].id]);
}swap(a[d[tim].id],d[tim].x);//取反,以后还要改直接改就行
}
while(tim>q[i].delid){
if(d[tim].id >= l && d[tim].id <= r){
add(d[tim].x);
dl(a[d[tim].id]);
}swap(a[d[tim].id],d[tim].x);//取反,以后还要改直接改就行
tim--;
}
ans[q[i].id] = now;
}
}
void solve(){
cin>>n>>m;
len = pow(n,2.0/3.0);
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=m;i++){
char c;
int x,y;
cin >> c >> x >> y;
if(c=='Q'){
q[++qn]={qn,dn,x,y};
}else{
d[++dn]={x,y};
}
}
md();
for(int i = 1;i <= qn;i++){
cout<<ans[i]<<endl;
}
}
signed main(){
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int T=1;
// cin >> T;
while(T--) solve();
return 0;
}
```
但是他依然WA0了。
by apiad @ 2024-03-06 21:33:42
@[apiad](/user/1251532) cnt[N]改cnt[M]吧。
by Oier_szc @ 2024-03-06 21:54:02
@[Oier_szc](/user/368204) 过了,谢谢
by apiad @ 2024-03-06 22:28:30
@[apiad](/user/1251532) 好的,主要是调的时候也犯了这个错误,顺便警示一下后人.
by Oier_szc @ 2024-03-06 22:36:07
@[Oier_szc](/user/368204) 嗯。。
by apiad @ 2024-03-06 22:43:25