Advertisement
Guest User

Untitled

a guest
Feb 16th, 2020
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.11 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <math.h>
  4. #include <vector>
  5. #include <algorithm>
  6. #include <string>
  7. #include <numeric>
  8. #define int long long
  9. using namespace std;
  10. const int INF = 100000000000000;
  11. const int SIZE = 200200;
  12. int a[SIZE];
  13. int t[4 * SIZE];
  14. int sum = 0;
  15. int ans = 0;
  16.  
  17.  
  18. inline void build(int v, int l, int r) {
  19.     if (r - l == 1) {
  20.         t[v] = a[l];
  21.         return;
  22.     }
  23.     int m = (l + r) / 2;
  24.     build(2 * v + 1, l, m);
  25.     build(2 * v + 2, m, r);
  26.     t[v] = t[2 * v + 1] + t[2 * v + 2];
  27. }
  28.  
  29. inline void find(int v, int l, int r, int pos) {
  30.     if (r - l == 1)
  31.         return;
  32.     int m = (l + r) / 2;
  33.     if (pos < m) {
  34.         sum += t[2 * v + 2];
  35.         find(2 * v + 1, l, m);
  36.     }
  37.     else {
  38.         find(2 * v + 2, m, r);
  39.     }
  40. }
  41.  
  42. inline void ask(int v, int l, int r, int val) {
  43.     if (r - l == 1) {
  44.         ans = r;
  45.         return;
  46.     }
  47.     int m = (l + r) / 2;
  48.     if (t[2 * v + 1] >= val) {
  49.         ask(2 * v + 1, l, m, val);
  50.     }
  51.     else {
  52.         ask(2 * v + 2, m, r, val - t[2 * v + 1]);
  53.     }
  54. }
  55.  
  56. inline void change(int v, int l, int r, int pos) {
  57.     if (r - l == 1) {
  58.         t[v] = 1 - t[v];
  59.         return;
  60.     }
  61.     int m = (l + r) / 2;
  62.     if (pos < m) {
  63.         change(2 * v + 1, l, m, pos);
  64.     }
  65.     else {
  66.         change(2 * v + 2, m, r, pos);
  67.     }
  68.     t[v] = t[2 * v + 1] + t[2 * v + 2];
  69. }
  70.  
  71.  
  72. void solve() {
  73.     for (int i = 0; i < SIZE; i++) {
  74.         a[i] = 1;
  75.     }
  76.     int m; cin >> m;
  77.     vector<int> q(m);
  78.     build(0, 0, SIZE);
  79.     for (int i = 0; i < m; i++)
  80.         cin >> q[i];
  81.     for (int i = 0; i < m; i++) {
  82.         if (q[i] > 0) {
  83.             find(0, 0, SIZE, q[i] - 1);
  84.             int ths = t[0] - sum;
  85.             sum = 0;
  86.             ask(0, 0, SIZE, ths);
  87.             cout << ans << "\n";
  88.             ans = 0;
  89.             change(0, 0, SIZE, q[i] - 1);
  90.         }
  91.         else {
  92.             change(0, 0, SIZE, abs(q[i]) - 1);
  93.         }
  94.     }
  95. }
  96.  
  97. signed main() {
  98.     //freopen("rvq.in", "r", stdin);
  99.     //freopen("rvq.out", "w", stdout);
  100.     cin.tie(0);
  101.     cout.tie(0);
  102.     solve();
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement