Submission #1340781

#TimeUsernameProblemLanguageResultExecution timeMemory
1340781kyrillos원숭이와 사과 나무 (IZhO12_apple)C++20
0 / 100
2094 ms344 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define endl "\n"
#define sz(s) (int)s.size()
#define all(x) x.begin(),x.end()


extern struct node *const EMPTY;
struct node{
    ll sum,lazy;
    node *l,*r;
    void set(int ns,int ne,int v){
       sum=(ne-ns)+1;
       lazy=1;
    }
    node():sum(0),lazy(-1),l(this),r(this){};
    node(int v):sum(v),lazy(-1),l(EMPTY),r(EMPTY){};
};
node *const EMPTY = new node();

void pushDown(node *&cur, int ns, int ne) {
    if (cur->lazy == -1) return;
    if (ns == ne) {
        cur->lazy = -1;
        return;
    }
    
    int m = ns + (ne - ns) / 2;
    
    if (cur->l == EMPTY) cur->l = new node(0);
    if (cur->r == EMPTY) cur->r = new node(0);
    
    cur->l->set(ns, m, cur->lazy);
    cur->r->set(m + 1, ne, cur->lazy);
    cur->lazy = -1;
}
void update(int qs,int qe,node *&cur,int ns=1,int ne=1e9){
     if(qs>ne || qe<ns)return;
     if(cur==EMPTY)cur=new node(0);
      if(qs<=ns && qe>=ne){
          cur->set(ns,ne,1);
          return;
      }
    pushDown(cur,ns,ne);
    int m=ns+(ne-ns)/2;
    update(qs,qe,cur->l,ns,m);
    update(qs,qe,cur->r,m+1,ne);
    cur->sum=cur->l->sum+cur->r->sum;
}

ll query(int qs,int qe,node *&cur,int ns=1,int ne=1e9){
    if(qs>ne || qe<ns)return 0;
    if(qs<=ns && qe>=ne)return cur->sum;
    if(cur==EMPTY)return 0;
    pushDown(cur,ns,ne);
    int m=ns+(ne-ns)/2;
    return query(qs,qe,cur->l,ns,m)+query(qs,qe,cur->r,m+1,ne);
}

void solve(size_t tc){
    int m; cin>>m;
     node *root = EMPTY;
     ll C=0;
     while(m--){
         int t,l,r; cin>>t>>l>>r;
         if(t==2){
            // cout<<l+C<<" "<<r+C<<endl;
            update(l+C,r+C,root);
         }else{
           C=query(l+C,r+C,root);
           cout<<C<<endl;
         }
     }
}

signed main() {
    ios::sync_with_stdio(false);
    cout.tie(NULL);
    cin.tie(NULL);
    freopen("f.in", "r", stdin);
    freopen("f.out", "w", stdout);
    size_t _OO_ = 1;
    //cin >> _OO_;
    for (size_t tc = 1; tc <= _OO_; tc++){
       solve(tc);
    }
    return 0;
}

Compilation message (stderr)

apple.cpp: In function 'int main()':
apple.cpp:81:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   81 |     freopen("f.in", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~
apple.cpp:82:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   82 |     freopen("f.out", "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...