Advertisement
Guest User

Untitled

a guest
Mar 29th, 2020
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.96 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <ext/pb_ds/assoc_container.hpp>
  3. #define pb push_back
  4. #define INF 0x3f3f3f3
  5. #define LINF 0x3f3f3f3f3f3f3f
  6. #define MAXN 2*int(1e5)+7
  7. #define fim '\n'
  8. #define ll long long
  9. #define f first
  10. #define s second
  11. #define FAST cin.tie(0), cout.tie(0), ios::sync_with_stdio(0)
  12. #define debug(x) cout << "DEBUG " << x << fim
  13. #define debug2(x, y) cout << "DEBUG " << x << " " << y << fim
  14. #define debug3(x, y, z) cout << "DEBUG " << x << " " << y << " " << z<< fim
  15. #define max3(x, y, z) max(x, max(y, z))
  16. using namespace std;
  17. using namespace __gnu_pbds;
  18. typedef pair<int, int> pii;
  19. typedef pair<string, int> psi;
  20. typedef pair<unsigned ll, pair<int, int> > piii;
  21. typedef pair<pair<int, int>, int> piii2;
  22. typedef pair<char, pair<int, int>> pcii;
  23. typedef tree<int,null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> indexed_set;
  24.  
  25. int n, q, bit[MAXN], vet[MAXN];
  26. vector<pcii> queries;
  27. unordered_map<int, int> val;
  28.  
  29. void update(int i, int x) {
  30.     while(i <= n) {
  31.         bit[i] += x;
  32.         i += i & -i;
  33.     }
  34.     return;
  35. }
  36.  
  37. int query(int i) {
  38.     int soma = 0;
  39.     while(i > 0) {
  40.         soma += bit[i];
  41.         i -= i & -i;
  42.     }
  43.     return soma;
  44. }
  45.  
  46. int main() {
  47.    
  48.     FAST;
  49.     cin >> n >> q;
  50.     vector<int> numbers;
  51.    
  52.     for(int i = 1; i <= n; numbers.pb(vet[i]), i++)
  53.         cin >> vet[i];
  54.    
  55.     while(q--) {
  56.         char c;
  57.         int a, b;
  58.         cin >> c >> a >> b;
  59.         if(c == '!')
  60.             numbers.pb(b);
  61.         else {
  62.             numbers.pb(a);
  63.             numbers.pb(b);
  64.         }
  65.         queries.pb({c, {a, b}});
  66.     }
  67.    
  68.     sort(numbers.begin(), numbers.end());
  69.    
  70.     int cont = 0;
  71.     for(auto i : numbers) {
  72.         if(val[i]) continue;
  73.         val[i] = ++cont;
  74.     }
  75.    
  76.     for(int i = 1; i <= n; i++)
  77.         update(val[vet[i]], 1);
  78.    
  79.     for(auto i : queries) {
  80.         if(i.f == '?')
  81.             cout << query(val[i.s.s])-query(val[i.s.f]-1) << endl;
  82.         else {
  83.             update(val[vet[i.s.f]], -1);
  84.             update(val[i.s.s], 1);
  85.             vet[i.s.f] = i.s.s;
  86.         }
  87.     }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement