Submission #1299636

#TimeUsernameProblemLanguageResultExecution timeMemory
1299636minhchau1101Monkey and Apple-trees (IZhO12_apple)C++20
100 / 100
453 ms205672 KiB
#include                        <bits/stdc++.h>
#define ll                      long long
#define se                      second
#define fi                      first
#define codedbyMC               ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define file_in(NAME)           freopen(NAME".INP", "r", stdin)
#define file_out(NAME)          freopen(NAME".OUT", "w", stdout)
#define iffile(NAME)            if (fopen(NAME".INP", "r")) {file_in(NAME); file_out(NAME);}
#define pb                      push_back
#define eb                      emplace_back
#define all(v)                  v.begin(), v.end()
#define sz(v)                   (int)v.size()
#define trav(a, x)              for(auto &a : x)
#define endl                    '\n'
#define debug(x)                cout << #x << " = " << x << endl;
#define lb(v, x)                lower_bound(all(v), x)
#define ub(v, x)                upper_bound(all(v), x)
#define ms(arr, v)              memset(arr, v, sizeof(arr))
#define pii                     pair<int, int>
#define pll                     pair<ll, ll>
#define pli                     pair<ll, int>
#define vi                      vector<int>
#define vpii                    vector<pii>
#define fort(i,l,r)             for (int i=l;i<=r;i++)
#define forl(i,l,r)             for (int i=l;i>=r;i--)
#define builcnt(x)              __builtin_popcountll(x)
#define getbit(x, i)            ((x >> i) & 1)
#define onbit(x, i)             (x | (1LL << i))
#define resetbit(x, i)          (x & ~(1LL << i))
#define clearbit(x, i)          (x ^ (1LL << i))
using namespace std;

const int N = 5e5+7;
const int MOD = 1e9+7;
const ll INF = 1e18;
const ll NEG = -1e18;

template<class T> bool chmin(T &a, const T &b){ if(b < a){ a = b; return true;} return false; }
template<class T> bool chmax(T &a, const T &b){ if(b > a){ a = b; return true;} return false; }

inline void add(int &a, int b){a += b; if (a >= MOD) a -= MOD;}
inline void sub(int &a, int b){a -= b; if (a < 0) a += MOD;}
inline int mul(const int &a, const int &b){return 1ll * (a%MOD) * (b%MOD) % MOD;}

int n, m, k, q, x, y, t;
ll an = 0;

vector<int> a, f;

void sub1() {

}
struct dynamic_segment_tree{
    struct node {
        ll val;
        int lazy;
        node *l, *r;
        node(ll v = 0) : val(v), lazy(-1), l(nullptr), r(nullptr) {}
    };
    node *root;
    int L, R;
    dynamic_segment_tree(int l, int r){
        L = l;
        R = r;
        root = nullptr;
    }

    inline void ensure(node* &nd) {
        if (!nd) nd = new node(0);
    }

    void push(node* &id, int l, int r) {
        if (!id || id->lazy == -1 || l == r) return;
        int mid = (l + r) >> 1;
        ensure(id->l);
        ensure(id->r);
        if (id->lazy == 1) {
            id->l->val = (ll)(mid - l + 1);
            id->l->lazy = 1;
            id->r->val = (ll)(r - mid);
            id->r->lazy = 1;
        }
        id->lazy = -1;
    };

    void upd(node* &id, int l, int r, int u, int v) {
        if (v < l || r < u) return;
        ensure(id);
        if (u <= l && r <= v) {
            id->val = (ll)(r - l + 1);
            id->lazy = 1;
            return;
        }
        push(id, l, r);
        int mid = (l + r) >> 1;
        upd(id->l, l, mid, u, v);
        upd(id->r, mid + 1, r, u, v);
        ll leftVal  = id->l ? id->l->val : 0;
        ll rightVal = id->r ? id->r->val : 0;
        id->val = leftVal + rightVal;
    };
    void upd(int u, int v) {
        if (u > v) return;
        if (v < L || u > R) return;
        u = max(u, L); v = min(v, R);
        upd(root, L, R, u, v);
    }
    ll get(node* &id, int l, int r, int u, int v) {
        if (!id || v < l || r < u) return 0;
        if (u <= l && r <= v) {
            return id->val;
        }
        push(id, l, r);
        int mid = (l + r) >> 1;
        ll res = 0;
        if (u <= mid) res += get(id->l, l, mid, u, v);
        if (v > mid)  res += get(id->r, mid + 1, r, u, v);
        return res;
    };
    ll get(int u, int v){
        if (u > v) return 0;
        if (v < L || u > R) return 0;
        u = max(u, L); v = min(v, R);
        return get(root, L, R, u, v);
    }

    void clear(node* id) {
        if (!id) return;
        clear(id->l);
        clear(id->r);
        delete id;
    }
    void clearAll() {
        clear(root);
        root = nullptr;
    }
};

int main() {

    codedbyMC
    iffile("test")
    iffile("")

    cin >> n;

    const int LBOUND = 1;
    const int RBOUND = 1000000000;
    dynamic_segment_tree dst(LBOUND, RBOUND);

    ll C = 0;
    for (int i = 0; i < n; ++i) {
        int ty;
        ll u, v;
        cin >> ty >> u >> v;
        ll l = u + C;
        ll r = v + C;
        if (l < LBOUND) l = LBOUND;
        if (r > RBOUND) r = RBOUND;
        if (l > r) {
            if (ty == 1) {
                cout << 0 << endl;
                C = 0;
            }
            continue;
        }
        if (ty == 2) {
            dst.upd((int)l, (int)r);
        } else if (ty == 1) {
            ll ans = dst.get((int)l, (int)r);
            cout << ans << endl;
            C = ans;
        }
    }
    dst.clearAll();

    return 0;
}
/*
                     :****+:
                   :#####****.
                   ##########****-
         .+***+.  :############****:
       .***######..##############***.
      .***########-=################:
      .**##########=################
      :**###########+#############:
     ***#############-#######+-.:--:.
    -**#################+#*###########*.
    -**############**#################**
     =##########=-*##################***.
       +*##*+..*#####################***.
            +#######################***.
          .########################**.
          #################=######***
          ****##############.####***.
           +***#############. :+#+:
             .==.+****####:#:
                  :*****=. #.
                          -#.
                          *#
                         +#
                        =#.
                       *#
                     .#-
            Mchau — don’t give up! 
            time:
            bhehe
*/

Compilation message (stderr)

apple.cpp: In function 'int main()':
apple.cpp:6:40: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    6 | #define file_in(NAME)           freopen(NAME".INP", "r", stdin)
      |                                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
apple.cpp:8:62: note: in expansion of macro 'file_in'
    8 | #define iffile(NAME)            if (fopen(NAME".INP", "r")) {file_in(NAME); file_out(NAME);}
      |                                                              ^~~~~~~
apple.cpp:142:5: note: in expansion of macro 'iffile'
  142 |     iffile("test")
      |     ^~~~~~
apple.cpp:7:40: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    7 | #define file_out(NAME)          freopen(NAME".OUT", "w", stdout)
      |                                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
apple.cpp:8:77: note: in expansion of macro 'file_out'
    8 | #define iffile(NAME)            if (fopen(NAME".INP", "r")) {file_in(NAME); file_out(NAME);}
      |                                                                             ^~~~~~~~
apple.cpp:142:5: note: in expansion of macro 'iffile'
  142 |     iffile("test")
      |     ^~~~~~
apple.cpp:6:40: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    6 | #define file_in(NAME)           freopen(NAME".INP", "r", stdin)
      |                                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
apple.cpp:8:62: note: in expansion of macro 'file_in'
    8 | #define iffile(NAME)            if (fopen(NAME".INP", "r")) {file_in(NAME); file_out(NAME);}
      |                                                              ^~~~~~~
apple.cpp:143:5: note: in expansion of macro 'iffile'
  143 |     iffile("")
      |     ^~~~~~
apple.cpp:7:40: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    7 | #define file_out(NAME)          freopen(NAME".OUT", "w", stdout)
      |                                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
apple.cpp:8:77: note: in expansion of macro 'file_out'
    8 | #define iffile(NAME)            if (fopen(NAME".INP", "r")) {file_in(NAME); file_out(NAME);}
      |                                                                             ^~~~~~~~
apple.cpp:143:5: note: in expansion of macro 'iffile'
  143 |     iffile("")
      |     ^~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...