Advertisement
Guest User

xd2

a guest
Aug 21st, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. template<typename T>
  5. struct tree {
  6.     int n = 1;
  7.     int s;
  8.     vector<T> elements;
  9.     tree(int _n){
  10.         while (n < _n){
  11.             n *= 2;
  12.         }
  13.         n*=2;
  14.         elements.resize(n);
  15.         n /= 2;
  16.     }
  17.     T read(int a, int b, int l, int r, int i){
  18.         if (a <= l and r <= b){
  19.             return elements[i];
  20.         }
  21.         int mid = (l+r)/2;
  22.         T result =  0;
  23.         if (a <= mid) result += read(a, b, l, mid, 2*i);
  24.         if (mid + 1 <= b) result += read(a, b, mid + 1, r, 2*i+1);
  25.         return result;
  26.     }
  27.     void push(int i, T x){
  28.         i += n;
  29.         while (i != 0){
  30.             elements[i] += x;
  31.             i/=2;
  32.         }
  33.         return;
  34.     }
  35.     void print(){
  36.         int i = 1;
  37.         int m = 1;
  38.         int lim = n*2;
  39.         while (i < lim){
  40.             while (i < m){
  41.                 cout << elements[i] << ' ';
  42.                 i++;
  43.             }
  44.             m *= 2;
  45.             cout << "\n";
  46.         }
  47.     }
  48. };
  49.  
  50. int main(){
  51.     ios_base::sync_with_stdio(0);
  52.     cin.tie(0);
  53.     cout.tie(0);
  54.  
  55.     int q;
  56.     cin >> q;
  57.     vector<int> stones(q);
  58.     vector<int> sorted(q);
  59.     while (q-->0){
  60.         int a;
  61.         cin >> a;
  62.         stones[q] = sorted[q] = a;
  63.     }
  64.     sort(sorted.begin(), sorted.end());
  65.     unordered_map<int, int> dict;
  66.     int last = 1;
  67.     dict[*sorted.begin()] = last;
  68.     for (auto i = sorted.begin()+1; i != sorted.end(); i++){
  69.         if (!(*i == *(i-1))){
  70.             last += 1;
  71.         }
  72.         dict[*i] = last;
  73.     }
  74.    
  75.     for (auto i = stones.begin(); i != stones.end(); i++){
  76.         *i = dict[*i];
  77.     }
  78.     reverse(stones.begin(), stones.end());
  79.  
  80.     tree<int> T(1e6+1);
  81.  
  82.     for (auto stone : stones){
  83.         T.push(stone, +1);
  84.         cout << T.read(0, stone-1, 0, T.n-1, 1) << '\n';
  85.     }
  86.     return 0;
  87. }
  88. /*
  89. 6
  90. 5 3 6 10 2 4
  91. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement