답안 #254087

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
254087 2020-07-29T10:48:19 Z test2 원숭이와 사과 나무 (IZhO12_apple) C++14
0 / 100
0 ms 384 KB
#include <bits/stdc++.h>

using namespace std;

const int N = (1 << 31);
int t, a, b, c;
int tree[2000006];
int nodes;
int le[2000006], ri[2000006];

int left(int x)
{
        if (!le[x])
        {
                return le[x] = ++nodes;
        }
        return le[x];
}

int right(int x)
{
        if (!ri[x])
        {
                return ri[x] = ++nodes;
        }
        return ri[x];
}

void update(int node, int L, int R, int l, int r)
{
        if (l > r || l > R || r < L || tree[node] == R - L + 1)
                return;
        if (L >= l && R <= r)
        {
                tree[node] = R - L + 1;
                return;
        }
        int mid = (L + R) >> 1;
        update(left(node), L, mid, l, r);
        update(right(node), mid + 1, R, l, r);
        if (!le[node])
                tree[node] = tree[ri[node]];
        else if (!ri[node])
                tree[node] = tree[le[node]];
        else
                tree[node] = tree[le[node]] + tree[ri[node]];
}

int query(int node, int L, int R, int l, int r)
{
        if (l > r || l > R || r < L)
                return 0;

        if (L >= l && R <= r)
        {
                return tree[node];
        }

        if (tree[node] == R - L + 1)
        {
                return min(r, R) - max(l, L) + 1;
        }

        int mid = (L + R) >> 1;
        int s1 = query(left(node), L, mid, l, r);
        int s2 = query(right(node), mid + 1, R, l, r);

        return s1 + s2;
}

int main()
{
        ios_base::sync_with_stdio(0);
        cin.tie(0);
        //freopen("in.in", "r", stdin);

        cin >> t;
        int C = 0;
        while (t--)
        {
                int a, b, c;
                cin >> a >> b >> c;
                b += C;
                c += C;
                if (a == 1)
                {
                        int ans = query(0, 1, N, b, c);
                        C = ans;
                        cout << ans << "\n";
                }
                else
                {
                        update(0, 1, N, b, c);
                }
        }

        return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -