제출 #920526

#제출 시각아이디문제언어결과실행 시간메모리
920526Macker원숭이와 사과 나무 (IZhO12_apple)C++17
0 / 100
2072 ms164444 KiB
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
#define all(v) v.begin(), v.end()

struct node{
    int val = 0;
    int lz = 0;
};
unordered_map<int, node> st;

void prop(int i, int d){
    if(!st[i].lz) return;
    st[i * 2].val = d / 2;
    st[i * 2 + 1].val = d / 2;
    st[i * 2].lz = 1;
    st[i * 2 + 1].lz = 1;
    st[i].lz = 0;
}

void upd(int l, int r, int i = 1, int s = 0, int e = 2147483647){
    if(l >= e || r <= s) return;
    if(l <= s && e <= r){
        st[i].val = e - s;
        st[i].lz = 1;
        return;
    }
    prop(i, e - s);

    upd(l, r, i * 2, s, (s + e) / 2);
    upd(l, r, i * 2 + 1, (s + e) / 2, e);
    st[i].val = st[i * 2].val + st[i * 2 + 1].val;
}

int qry(int l, int r, int i = 1, int s = 0, int e = 2147483647){
    if(l >= e || r <= s) return 0;
    if(l <= s && e <= r) return st[i].val;
    prop(i, e - s);

    return qry(l, r, i * 2, s, (s + e) / 2) + qry(l, r, i * 2 + 1, (s + e) / 2, e);
}

int main()
{
    int m; cin >> m;
    int c = 0;
    for (int i = 0; i < m; i++) {
        int d, x, y; cin >> d >> x >> y;
        if(d == 1){
            int res = qry(x + c, y + c + 1);
            cout << res << "\n";
            c = res;
        }
        else{
            upd(x + c, y + c + 1);
        }
    }
    
}
#Verdict Execution timeMemoryGrader output
Fetching results...