DuongNhi99

SHELF (Fenwick Tree)

Nov 30th, 2020
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.84 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. using namespace std;
  4.  
  5. const int N = 1e5 + 5;
  6.  
  7. int n;
  8. ll fen[N];
  9.  
  10. void update(int p, int val){
  11.     for(int i = p; i <= n; i += i & -i)
  12.         fen[i] += val;
  13. }
  14. ll sum(int p) {
  15.     ll ans = 0;
  16.     for(int i = p; i; i -= i & -i)
  17.         ans += fen[i];
  18.     return ans;
  19. }
  20.  
  21. int main()
  22. {
  23.     //freopen("in.txt", "r", stdin);
  24.     freopen("SHELF.inp", "r", stdin);
  25.     freopen("SHELF.out", "w", stdout);
  26.     ios_base::sync_with_stdio(false);
  27.     cin.tie(NULL); cout.tie(NULL);
  28.  
  29.     cin >> n;
  30.     for(int i = 1; i <= n; ++i) {
  31.         int x;
  32.         cin >> x;
  33.         update(i, x);
  34.     }
  35.  
  36.     int m;
  37.     cin >> m;
  38.     for(int i = 1; i <= m; ++i) {
  39.         int x; cin >> x;
  40.  
  41.         ll left = sum(x - 1);
  42.         ll right = sum(n) - sum(x);
  43.         cout << min(left, right) << ' ';
  44.         update(x, 1);
  45.     }
  46.  
  47.     return 0;
  48. }
  49.  
Advertisement
Add Comment
Please, Sign In to add comment