fork(2) download
  1. #include <bits/stdc++.h>
  2. #include <ext/pb_ds/assoc_container.hpp>
  3. #include <ext/pb_ds/tree_policy.hpp>
  4. #define endl '\n'
  5. using namespace std;
  6. using namespace __gnu_pbds;
  7. typedef pair<int, int> pii;
  8. typedef tree<pii, null_type, less<pii>, rb_tree_tag, tree_order_statistics_node_update> OST;
  9.  
  10. const int N = 100001;
  11.  
  12. OST bit[N];
  13.  
  14. void insert(int x, int y)
  15. {
  16. for(int i = x; i < N; i += i & -i)
  17. bit[i].insert({y, x});
  18. }
  19.  
  20. void remove(int x, int y)
  21. {
  22. for(int i = x; i < N; i += i & -i)
  23. bit[i].erase({y, x});
  24. }
  25.  
  26. int query(int x, int y)
  27. {
  28. int ans = 0;
  29. for(int i = x; i > 0; i -= i & -i)
  30. ans += bit[i].order_of_key({y+1, 0});
  31. return ans;
  32. }
  33.  
  34.  
  35. int main(){
  36. ios::sync_with_stdio(false);
  37. cin.tie(0);
  38. int n,q;
  39. cin>>n>>q;
  40. vector<int> arr(n+1);
  41. for(int i=1;i<=n;++i){
  42. cin>>arr[i];
  43. insert(i,arr[i]);
  44. }
  45. while(q--){
  46. string op;
  47. cin>>op;
  48. if(op=="M"){
  49. int i,x;
  50. cin>>i>>x;
  51. remove(i,arr[i]);
  52. insert(i,x);
  53. arr[i]=x;
  54. }else{
  55. int p,q,x;
  56. cin>>p>>q>>x;
  57. cout<<query(q,x)-query(p-1,x)<<endl;
  58. }
  59. }
  60. }
Success #stdin #stdout 0.01s 12968KB
stdin
4 6
3
4
1
7
C 2 4 4
M 4 1
C 2 4 4
C 1 4 5
M 2 10
C 1 3 9
stdout
2
3
4
2