Advertisement
Ginger_samurai

Untitled

Oct 13th, 2020
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.48 KB | None | 0 0
  1. #include<vector>
  2. #include <string>
  3. #include<algorithm>
  4. #include <iostream>
  5. #include <queue>
  6. #include<set>
  7. #include<stack>
  8. #include<cmath>
  9. #include<math.h>
  10. #include<map>
  11. #include<unordered_map>
  12. #include<unordered_map>
  13. #include<ext/rope>
  14. using namespace std;
  15. using namespace __gnu_cxx;
  16. typedef long long ll;
  17. typedef pair<long long, long long> pll;
  18. #define mp make_pair
  19. #define fi(b, c) for(auto i = b; i <= c; i++)
  20. #define fj(b, c) for(auto j = b; j <= c; j++)
  21. #define fk(b, c) for(auto k = b; k <= c; k++)
  22. #define fq(b, c) for(auto q = b; q <= c; q++)
  23. #define fw(b, c) for(auto w = b; w <= c; w++)
  24. #define fim(b, c) for(auto i = b; i >= c; i--)
  25. #define fjm(b, c) for(auto j = b; j >= c; j--)
  26. #define fkm(b, c) for(auto k = b; k >= c; k--)
  27. #define all(a) a.begin(), a.end()
  28. #define rall(a) a.rbegin(), a.rend()
  29. #define sz(a) (ll)(a.size())
  30. #define fs first
  31. #define sd second
  32. #define endl "\n"
  33. #define cin(a) for(ll o = 0; o<a.size(); o++) cin>>a[o];
  34. #define cout(a) for(ll o = 0; o<a.size(); o++) cout<<a[o]<<" ";
  35. const ll inf = 1e9 + 123, llinf = 1e18 + 123;
  36. void xru(){
  37. //  setlocale(LC_ALL, "rus");
  38. //  freopen(".in", "r", stdin);
  39. //  freopen(".out", "w", stdout);
  40. //  ios_base::sync_with_stdio(false);
  41. //  cin.tie(NULL);
  42. //  cout.tie(NULL);
  43. }
  44. void run(){
  45.     cout<<endl;
  46.     system("pause");
  47. }
  48. ll MAXV = 2e5 + 123;
  49. ll n;
  50. vector<ll>t(4*MAXV), a(4*MAXV);
  51.  
  52. ll left_son(ll v){ return 2 * v + 1; };
  53. ll right_son(ll v){ return 2 * v + 2; };
  54.  
  55. void push(ll v, ll L, ll R){
  56.     t[v] += a[v];
  57.     a[left_son(v)] += a[v];
  58.     a[right_son(v)] += a[v];
  59.     a[v] = 0;
  60. }
  61.  
  62. void relax(ll v, ll L, ll M, ll R){
  63.     t[v] = max(t[left_son(v)] +  a[left_son(v)],
  64.            t[right_son(v)] + a[right_son(v)]);
  65. }
  66.  
  67. void build(vector<ll>& base, ll v = 0, ll L = 0, ll R = n){
  68.     // cout << L << " " << R << endl;
  69.     a[v] = 0;
  70.     if(R - L == 1){
  71.         t[v] = base[L];
  72.         return;
  73.     }
  74.     ll M = (L + R) / 2;
  75.     build(base, left_son(v), L, M);
  76.     build(base, right_son(v), M, R);
  77.     relax(v, L, M, R);
  78.     return;
  79. }
  80.  
  81. void add(ll l, ll r, ll h, ll v = 0, ll L = 0, ll R = n){
  82.     // cout << L << " " << R << endl;
  83.     if( L >= l && R <= r){
  84.         a[v] += h;
  85.         return;
  86.     }
  87.     else if(L >= r || R <= l){
  88.         return;
  89.     }
  90.     ll M = (L+R)/2;
  91.     add(l, r, h, left_son(v), L, M);
  92.     add(l, r, h, right_son(v), M, R);
  93.     push(v, L, R);
  94.     relax(v, L, M, R);
  95. }
  96.  
  97. ll mx(ll l, ll r, ll v = 0, ll L = 0, ll R = n){
  98.     // cout << L << " " << R << endl;
  99.     if(L >= l && R <= r) {
  100.         return t[v] + a[v];
  101.     }
  102.     if(L >= r || R <= l){
  103.         return 0;
  104.     }
  105.     push(v, L, R);
  106.     ll M = (L+R)/2;
  107.     ll ans = max(mx(l, r, left_son(v), L, M) , mx(l, r, right_son(v), M, R));
  108.     relax(v, L, M, R);
  109.     return ans;
  110. }
  111.  
  112. void print_tree(ll agg = 0, ll v = 0, ll L = 0, ll R = n){
  113.     agg += a[v];
  114.     if(R - L == 1){
  115.         cout << L <<": " << t[v] + agg << endl;
  116.         return;
  117.     }
  118.     ll M =(L+R)/2;
  119.     print_tree(agg, left_son(v), L, M);
  120.     print_tree(agg, right_son(v), M, R);
  121. }
  122.  
  123. int main() {
  124.     cin >> n;
  125.     n+=2;
  126.     ll k;
  127.     cin >> k;
  128.     vector<ll> base(n, 0);
  129.     build(base);
  130.     ll q;
  131.     cin >> q;
  132.     fi(0, q-1){
  133.         ll l, r;
  134.         cin >> l >> r;
  135.         ll cnt = mx(l, r);
  136.         // cout << k << " " << cnt << endl;
  137.         if(k > cnt) cout << "1";
  138.         else cout << "0";
  139.         cout << endl;
  140.         if(k > cnt) add(l, r,  1);
  141.         // print_tree();
  142.     }
  143.     // run();
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement