Guest User

Untitled

a guest
May 11th, 2020
1,688
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.64 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define F first
  3. #define S second
  4. #define pii pair<int,int>
  5. using namespace std;
  6. int ft[(int)4e5+1] = {0} , maxn=4e5;
  7. void update(int i , int x){
  8. for(;i<=maxn;i+=(i&-i)) ft[i]+=x;
  9. return;
  10. }
  11. int query(int i){
  12. int sum = 0;
  13. for(;i>0;i-=(i&-i)) sum+=ft[i];
  14. return sum ;
  15. }
  16. int main(){
  17. int n , m;
  18. cin>>n>>m ;
  19. map<int,int> vis;
  20. vector<int> s;
  21. vector<int> e(n+1);
  22. for(int i=1;i<=n;i++){
  23. cin>>e[i];
  24. if(vis[e[i]]) continue;
  25. vis[e[i]]=1;
  26. s.push_back(e[i]);
  27. }
  28. pair<char,pii> qu[m];
  29. for(int i=0;i<m;i++){
  30. cin>>qu[i].F>>qu[i].S.F>>qu[i].S.S;
  31. if(qu[i].F == '?') continue;
  32. if(vis[qu[i].S.S]) continue;
  33. vis[qu[i].S.S]=1;
  34. s.push_back(qu[i].S.S);
  35. }
  36. sort(s.begin(),s.end());
  37. for(int i=1;i<=n;i++){
  38. auto it = lower_bound(s.begin(),s.end(),e[i]);
  39. int id = it-s.begin()+1;
  40. update(id,1);
  41. }
  42. for(int i=0;i<m;i++){
  43. if(qu[i].F == '!'){
  44. auto it = lower_bound(s.begin(),s.end(),e[qu[i].S.F]);
  45. int id = it-s.begin();
  46. update(id+1,-1);
  47. e[qu[i].S.F] = qu[i].S.S;
  48. it = lower_bound(s.begin(),s.end(),qu[i].S.S);
  49. id = it-s.begin() ;
  50. update(id+1,+1);
  51. continue;
  52. }
  53. auto it = lower_bound(s.begin(),s.end(),qu[i].S.F);
  54. int id = it-s.begin() ;
  55. it = upper_bound(s.begin(),s.end(),qu[i].S.S);
  56. int id1 = it-s.begin() ;
  57. cout << query(id1)-query(id) << endl ;
  58. }
  59. return 0 ;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment