Submission #1216810

#TimeUsernameProblemLanguageResultExecution timeMemory
1216810badge881원숭이와 사과 나무 (IZhO12_apple)C++20
100 / 100
265 ms130524 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int mxN = 200005;
const int N = 1e9;

int q;

int idx = 0;
int root, ls[50 * mxN], rs[50 * mxN], bor[50 * mxN], lenj[50 * mxN];
void propagate(int v, int tl, int tr)
{
    if (lenj[v] != 0)
    {
        bor[v] = (tr - tl + 1);
        if (tl != tr)
        {
            if (!ls[v])
                ls[v] = ++idx;
            lenj[ls[v]] = lenj[v];
            if (!rs[v])
                rs[v] = ++idx;
            lenj[rs[v]] = lenj[v];
        }
        lenj[v] = 0;
    }
}

void lazyupd(int &v, int tl, int tr, int l, int r, int val)
{
    if (!v)
        v = ++idx;
    propagate(v, tl, tr);
    if (tl > tr || l > tr || tl > r)
        return;
    if (tl >= l && tr <= r)
    {
        lenj[v] = val;
        propagate(v, tl, tr);
        return;
    }
    int mid = (tl + tr) / 2;
    lazyupd(ls[v], tl, mid, l, r, val);
    lazyupd(rs[v], mid + 1, tr, l, r, val);
    bor[v] = bor[ls[v]] + bor[rs[v]];
}

int kverif(int v, int tl, int tr, int l, int r)
{
    propagate(v, tl, tr);
    if (!v || tl > r || l > tr)
        return 0;
    if (tl >= l && tr <= r)
        return bor[v];
    int mid = (tl + tr) / 2;
    return kverif(ls[v], tl, mid, l, r) + kverif(rs[v], mid + 1, tr, l, r);
}

int main()
{
    scanf("%d", &q);
    int last = 0;
    while (q--)
    {
        int t, l, r;
        scanf("%d %d %d", &t, &l, &r);
        l += last;
        r += last;

        if (t == 1)
        {
            last = kverif(root, 1, N, l, r);
            printf("%d\n", last);
        }
        else
            lazyupd(root, 1, N, l, r, 1);
    }

    return 0;
}

Compilation message (stderr)

apple.cpp: In function 'int main()':
apple.cpp:62:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   62 |     scanf("%d", &q);
      |     ~~~~~^~~~~~~~~~
apple.cpp:67:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   67 |         scanf("%d %d %d", &t, &l, &r);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...