1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <queue> #include <deque> #include <stack> #include <unordered_map> #include <unordered_set> #include <numeric> #include <iomanip> #define _fio ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define pb(e) push_back(e) #define all(x) (x).begin(), (x).end() #define allr(x) (x).rbegin(), (x).rend() #define endl '\n'
using namespace std; using i64 = long long; using PII = pair<int,int>; const int INF = 0x3f3f3f3f;
int main() { int n,m;const int N = 1e6+10; cin >> n >> m; int kn = pow(n,0.6666); vector<int> v(N),K(N),cnt(N); vector<array<int,4> > query = {{}}; vector<array<int,2> > modify = {{}}; for(int i=1;i<=n;++i) cin >> v[i],K[i] = (i-1)/kn + 1; for(int i=1;i<=m;++i) { string s;int x,y;cin >> s >> x >> y; if(s == "Q") query.push_back({x,y,(int)modify.size() - 1,(int)query.size()}); else modify.push_back({x,y}); } sort(query.begin() + 1,query.end(),[&](auto x,auto y){ if(K[x[0]] != K[y[0]]) return x[0] < y[0]; if(K[x[1]] != K[y[1]]) return x[1] < y[1]; return x[3] < y[3]; }); vector<int> ans(query.size()); int l = 1,r = 0,val = 0,t = 0; for(int i=1;i<query.size(); ++ i) { auto &e = query[i]; int ql = e[0],qr = e[1],qt = e[2],id = e[3]; auto add = [&](int x) -> void { if(!cnt[x]) val += 1; cnt[x] ++ ; }; auto sub = [&](int x) -> void { cnt[x] -- ; if(!cnt[x]) val -=1; }; auto time = [&](int x,int l,int r) -> void { int &w = modify[x][1], id = modify[x][0]; if(l <= id && id <= r) { sub(v[id]); add(w); } swap(v[id],w); }; while (l > ql) add(v[--l]); while (r < qr) add(v[++r]); while (l < ql) sub(v[l++]); while (r > qr) sub(v[r--]); while (t < qt) t+=1 ,time(t, ql, qr); while (t > qt) time(t, ql, qr),t-=1; ans[id] = val; } for(int i=1;i<ans.size();++i) cout << ans[i] << endl; return 0; }
|