답안 #1100153

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1100153 2024-10-13T02:57:59 Z spycoderyt 원숭이와 사과 나무 (IZhO12_apple) C++17
0 / 100
1 ms 348 KB
#include <bits/stdc++.h>
#define int long long 
using namespace std;

class tree{
    // keeps the god
    struct node{
        node* l = nullptr;
        node* r = nullptr;
        int val=0,lz=0;
    };
    typedef node* pnode;
    public:
    pnode rt = nullptr;
    void upd(pnode& t,int l,int r) {
        if(t->lz) {
            if(!t->l)t->l = new node();
            if(!t->r)t->r = new node();
            t->val = r - l + 1;
            t->l->lz = t->r->lz = 1;
        }
    }
    int query(pnode& t,int l,int r,int ll,int rr) {
        if(l > r || r < ll || l > rr) return 0;
        if(!t) t = new node();
        upd(t,l,r);
        if(l>=ll&&r<=rr) return t->val;
        int mid = l + (r-l)/2;
        return query(t->l,l,mid,ll,rr) + query(t->r,mid+1,r,ll,rr);
    }
    void upd(pnode& t,int l,int r,int ll,int rr) {
        if(l > r || r < ll || l > rr) return;
        if(!t) t = new node();
        upd(t,l,r);
        if(l>=ll&&r<=rr){
            t->lz=1;
            upd(t,l,r);
            return;
        }
        int mid = l + (r-l)/2;
        upd(t->l,l,mid,ll,rr);
        upd(t->r,mid+1,r,ll,rr);
        t->val = max(t->val,(t->l?t->l->val:0) + (t->r?t->r->val:0));
    }
}t;
int32_t main() {
    int q,a,b,c,val=0;cin>>q;
    while(q--) {
        cin>>a>>b>>c;
        if(a==1) {
            int tmp = t.query(t.rt,1,1e9,b+val,c+val);
            cout << tmp << "\n";
        } else {
            t.upd(t.rt,1,1e9,b+val,c+val);
        }
    }
}
/*

4
2 2 3
1 1 3
2 2 3
1 -1 3

5
2 5 8
2 7 10
1 5 8
1 7 10
1 1 10


2
2 1 10
1 1 100

*/
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -