Submission #1252311

#TimeUsernameProblemLanguageResultExecution timeMemory
1252311hossainrasel1042원숭이와 사과 나무 (IZhO12_apple)C++20
0 / 100
0 ms324 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
int L=1;
int R=1e9+10;
struct Node{
    Node *l;
    Node *r;
    int val;
    int lazy;
    Node():val(0),lazy(0),l(nullptr),r(nullptr){};
};
void push(Node *root,int l,int r){
    if(!root || !root->lazy)return;
    root->val=(r-l+1);
    if(l!=r){
        if(!root->l)root->l=new Node();
        if(!root->r)root->r=new Node();
        root->l->lazy=1;
        root->r->lazy=1;
    }
    root->lazy=0;
}
void update(Node *&root,int l,int r,int ql,int qr){
    if(r<ql || l>qr)return;
    if(!root)root=new Node();
    push(root,l,r);
    if(l>=ql && r<=qr){
        root->lazy=1;
        push(root,l,r);
        return;
    }
    int mid=(l+r)>>1;
    update(root->l,l,mid,ql,qr);
    update(root->r,mid+1,r,ql,qr);
    root->val=(root->l?root->l->val:0)+(root->r?root->r->val:0);
}
int query(Node* root,int l,int r,int ql,int qr){
    if(!root || r<ql || l>qr)return 0;
    push(root,l,r);
    if(l>=ql && r<=qr)return (root?root->val:0);
    int mid=(l+r)>>1;
    return query(root->l,l,mid,ql,qr)+query(root->r,mid+1,r,ql,qr);
}
signed main(){
    int t;
    int c=0;
    Node *node=nullptr;
    cin>>t;
    while(t--){
        int type,l,r;
        cin>>type>>l>>r;
        if(type==1){
            c=query(node,L,R,l+c,r+c);
            cout<<c<<endl;
        }else{
            update(node,L,R,l+c,r+c);
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...