Submission #616932

#TimeUsernameProblemLanguageResultExecution timeMemory
616932Hanksburger원숭이와 사과 나무 (IZhO12_apple)C++17
100 / 100
368 ms123056 KiB
#include <bits/stdc++.h>
using namespace std;
int seg[10000005], lazy[10000005], tl[10000005], tr[10000005], cnt=1;
void push(int i, int l, int r)
{
    if (lazy[i])
    {
        lazy[i]=0;
        seg[i]=r-l+1;
        if (!tl[i])
            tl[i]=++cnt;
        if (!tr[i])
            tr[i]=++cnt;
        lazy[tl[i]]=lazy[tr[i]]=1;
    }
}
void update(int i, int l, int r, int ql, int qr)
{
    push(i, l, r);
    if (ql<=l && r<=qr)
    {
        lazy[i]=1;
        push(i, l, r);
        return;
    }
    if (!tl[i])
        tl[i]=++cnt;
    if (!tr[i])
        tr[i]=++cnt;
    int m=(l+r)/2;
    if (l<=qr && ql<=m)
        update(tl[i], l, m, ql, qr);
    if (m+1<=qr && ql<=r)
        update(tr[i], m+1, r, ql, qr);
    push(tl[i], l, m);
    push(tr[i], m+1, r);
    seg[i]=seg[tl[i]]+seg[tr[i]];
}
int query(int i, int l, int r, int ql, int qr)
{
    push(i, l, r);
    if (ql<=l && r<=qr)
        return seg[i];
    if (!tl[i])
        tl[i]=++cnt;
    if (!tr[i])
        tr[i]=++cnt;
    int m=(l+r)/2, ans=0;
    if (l<=qr && ql<=m)
        ans+=query(tl[i], l, m, ql, qr);
    if (m+1<=qr && ql<=r)
        ans+=query(tr[i], m+1, r, ql, qr);
    return ans;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n, c=0;
    cin >> n;
    for (int i=1; i<=n; i++)
    {
        int d, x, y;
        cin >> d >> x >> y;
        if (d==1)
            cout << (c=query(1, 1, 1e9, x+c, y+c)) << '\n';
        else
            update(1, 1, 1e9, x+c, y+c);
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...