Advertisement
AlejandroGY

Untitled

May 1st, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.88 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define ll int64_t
  3.  
  4. constexpr ll MAX = 30030;
  5.  
  6. struct node {
  7.     ll *arr;
  8.     ll tam;
  9. };
  10.  
  11. ll n, m, last;
  12. ll a, b, c;
  13. ll v[MAX];
  14. node ST[4 * MAX];
  15.  
  16. void merge(ll m[], ll left[], ll right[], ll ti, ll td) {
  17.     ll i = 0, j = 0, k = 0;
  18.     while (i < ti && j < td) {
  19.         if (left[i] < right[j]) {
  20.             m[k++] = left[i++];
  21.         } else {
  22.             m[k++] = right[j++];
  23.         }
  24.     }
  25.     while (i < ti) {
  26.         m[k++] = left[i++];
  27.     }
  28.     while (j < td) {
  29.         m[k++] = left[j++];
  30.     }
  31. }
  32.  
  33. void build(ll ini, ll fin, ll nodo) {
  34.     if (ini == fin) {
  35.         ST[nodo].arr = new ll[1];
  36.         ST[nodo].arr[0] = v[ini];
  37.         ST[nodo].tam = 1;
  38.         return;
  39.     }
  40.    
  41.     ll mid = ini + (fin - ini) / 2;
  42.     ll left = (2 * nodo) + 1;
  43.     ll right = (2 * nodo) + 2;
  44.    
  45.     build(ini, mid, left);
  46.     build(mid + 1, fin, right);
  47.    
  48.     ST[nodo].arr = new ll[ST[left].tam + ST[right].tam];
  49.     ST[nodo].tam = ST[left].tam + ST[right].tam;
  50.     merge(ST[nodo].arr, ST[left].arr, ST[right].arr, ST[left].tam, ST[right].tam);
  51. }
  52.  
  53. ll query(ll ini, ll fin, ll nodo) {
  54.     if (a > fin || b < ini) {
  55.         return 0;
  56.     }
  57.    
  58.     if (a <= ini && fin <= b) {
  59.         auto it = std::upper_bound(ST[nodo].arr, ST[nodo].arr + ST[nodo].tam, c);
  60.         return ST[nodo].arr + ST[nodo].tam - it;
  61.     }
  62.    
  63.     ll mid = ini + (fin - ini) / 2;
  64.     ll left = (2 * nodo) + 1;
  65.     ll right = (2 * nodo) + 2;
  66.    
  67.     return query(ini, mid, left) + query(mid + 1, fin, right);
  68. }
  69.  
  70. int main( ) {
  71.     std::ios_base::sync_with_stdio(0);
  72.     std::cin.tie(0);
  73.    
  74.     std::cin >> n;
  75.     for (int i = 0; i < n; ++i) {
  76.         std::cin >> v[i];
  77.     }
  78.    
  79.     build(0, n - 1, 0);
  80.    
  81.     std::cin >> m;
  82.     for (int i = 0; i < m; ++i) {
  83.         std::cin >> a >> b >> c;
  84.        
  85.         if (a < 1) {
  86.             a = 1;
  87.         } else {
  88.             a ^= last;
  89.             a--;
  90.         }
  91.        
  92.         if (b > n) {
  93.             b = n;
  94.         } else {
  95.             b ^= last;
  96.             b--;
  97.         }
  98.        
  99.         c ^= last;
  100.        
  101.         if (a > b) {
  102.             last = 0;
  103.         } else {
  104.             last = query(0, n - 1, 0);
  105.         }
  106.        
  107.         std::cout << last << "\n";
  108.     }
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement