QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#628524#6608. Descent of DragonstanghaoWA 1ms8008kbC++141.6kb2024-10-10 20:45:582024-10-10 20:45:58

Judging History

你现在查看的是最新测评结果

  • [2024-10-10 20:45:58]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:8008kb
  • [2024-10-10 20:45:58]
  • 提交

answer

#include <bits/stdc++.h>
#define N 500007

using namespace std;

int n, q, tot, rt[N], lc[N * 50], rc[N * 50];

void build(int &u, int l, int r) {
    u = ++tot;
    if (l == r)
        return;
    int mid = l + r >> 1;
    build(lc[u], l, mid), build(rc[u], mid + 1, r);
}

void update(int u, int &v, int l, int r, int L, int R) {
    if (!u)
        return;
    if (l >= L && r <= R)
        return v = u, void();
    if (!v)
        v = ++tot;
    int mid = l + r >> 1;
    if (L <= mid)
        update(lc[u], lc[v], l, mid, L, R);
    if (R > mid)
        update(rc[u], rc[v], mid + 1, r, L, R);
    if (!lc[v] && !rc[v])
        v = 0;
}

int query(int u, int l, int r, int L, int R) {
    if (!u)
        return 0;
    if (l >= L && r <= R)
        return 1;
    int mid = l + r >> 1, ret = 0;
    if (L <= mid)
        ret |= query(lc[u], l, mid, L, R);
    if (R > mid)
        ret |= query(rc[u], mid + 1, r, L, R);
    return ret;
}

int main() {
    scanf("%d%d", &n, &q);
    build(rt[0], 1, n);
    for (int i = 1; i <= q; i++) {
        int opt, l, r, x;
        scanf("%d", &opt);
        if (opt == 1) {
            scanf("%d%d%d", &l, &r, &x);
            update(rt[x], rt[x + 1], 1, n, l, r);
        } else {
            scanf("%d%d", &l, &r);
            int L = 1, R = i;
            while (L <= R) {
                int mid = L + R >> 1;
                if (query(rt[mid], 1, n, l, r))
                    L = mid + 1;
                else
                    R = mid - 1;
            }
            printf("%d\n", R);
        }
    }
    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 1ms
memory: 8008kb

input:

5 5
1 3 5 0
1 1 4 1
1 1 5 2
2 2 2
2 4 5

output:

0
3

result:

ok 2 number(s): "0 3"

Test #2:

score: -100
Wrong Answer
time: 1ms
memory: 5960kb

input:

1000 1000
2 234 913
1 693 735 47
1 702 959 94
2 273 286
1 814 896 47
1 560 566 15
1 46 699 97
2 494 527
1 721 879 68
1 87 437 26
1 163 938 15
1 816 912 58
2 284 670
2 713 763
1 49 542 13
1 669 874 41
2 795 855
1 601 962 93
1 413 747 50
1 528 710 73
2 255 435
1 329 871 86
1 24 236 48
1 22 48 41
1 29 ...

output:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
1
0
1
0
0
0
0
0
2
2
0
2
0
0
0
0
2
0
2
2
2
2
2
2
2
2
2
2
0
0
2
0
0
0
3
3
3
0
0
0
1
1
1
3
3
2
2
3
3
1
3
2
3
3
3
3
3
1
3
2
3
3
3
3
3
3
3
3
2
3
3
3
3
2
3
3
3
2
1
3
3
3
1
1
3
2
3
3
1
1
3
3
2
3
3
3
3
3
3
3
2
2
3
3
2
3
1
3
3
2
3
4
4
4
4
2
4
2
4
4
4
...

result:

wrong answer 74th numbers differ - expected: '2', found: '3'