Advertisement
Josif_tepe

Untitled

May 10th, 2023
709
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.94 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <bits/stdc++.h>
  4. using namespace std;
  5. const int maxn = 33333;
  6.  
  7. int arr[maxn];
  8. int next_idx[maxn];
  9.  
  10. vector<int> segment_tree[3 * maxn];
  11. void build(int L, int R, int position) {
  12.     if(L == R) {
  13.         segment_tree[position].push_back(next_idx[L]);
  14.     }
  15.     else {
  16.         int middle = (L + R) / 2;
  17.         build(L, middle, 2 * position);
  18.         build(middle + 1, R, 2 * position + 1);
  19.         merge(segment_tree[2 * position].begin(), segment_tree[2 * position].end(), segment_tree[2 * position + 1].begin(), segment_tree[2 * position + 1].end(), back_inserter(segment_tree[position]));
  20.     }
  21. }
  22. int query(int L, int R, int position, int i, int j, int x) {
  23.     // L R i L R j L R
  24.     if(i <= L and R <= j) {
  25.         return lower_bound(segment_tree[position].begin(), segment_tree[position].end(), x) - segment_tree[position].begin();
  26.     }
  27.     if(R < i or j < L) {
  28.         return 0;
  29.     }
  30.     int middle = (L + R) / 2;
  31.     return query(L, middle, 2 * position, i, j, x) + query(middle + 1, R, 2 * position + 1, i, j, x);
  32. }
  33. int main() {
  34.     ios_base::sync_with_stdio(false);
  35.    
  36.     int n;
  37.     cin >> n;
  38.     vector<pair<int, int> > v;
  39.     for(int i = 0; i < n; i++) {
  40.         cin >> arr[i];
  41.         v.push_back(make_pair(arr[i], i));
  42.     }
  43.    
  44.     sort(v.begin(), v.end());
  45.     for(int i = 0; i < n; i++){
  46.         if(i + 1 < n) {
  47.             if(v[i].first == v[i + 1].first) {
  48.                 next_idx[v[i].second] = v[i + 1].second;
  49.             }
  50.             else {
  51.                 next_idx[v[i].second] = n;
  52.             }
  53.         }
  54.         else {
  55.             next_idx[v[i].second] = n;
  56.         }
  57.     }
  58.     int q;
  59.     cin >> q;
  60.     build(0, n, 1);
  61.     for(int i = 0; i < q; i++) {
  62.         int a, b;
  63.         cin >> a >> b;
  64.        
  65.         a--;
  66.         b--;
  67.        
  68.         cout << (b - a + 1) - query(0, n, 1, a, b, b + 1) << endl;
  69.        
  70.     }
  71.     return 0;
  72. }
  73.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement