QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#627666#6608. Descent of DragonsMoyouWA 2ms9780kbC++141.5kb2024-10-10 16:41:302024-10-10 16:41:31

Judging History

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

  • [2024-10-10 16:41:31]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:9780kb
  • [2024-10-10 16:41:30]
  • 提交

answer

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <map>
using namespace std;
const int N = 5e5 + 10, M = N * 35;

int n, q;
int dat[M], ls[M], rs[M], root[N], idx;
#define mid (l + r >> 1)
int build(int l, int r) {
	int u = ++ idx;
	if(l == r) return dat[u] = 1, u;
	ls[u] = build(l, mid), rs[u] = build(mid + 1, r), dat[u] = dat[ls[u]] + dat[rs[u]];
	return u;
}
int update(int p, int q, int l, int r, int ql, int qr) {
//	if(!p) return 0;
	if(ql <= l && qr >= r) return p;
	if(!q) q = ++ idx;
	if(ql <= mid) ls[q] = update(ls[p], ls[q], l, mid, ql, qr);
	if(qr > mid) rs[q] = update(rs[p], rs[q], mid + 1, r, ql, qr);
	dat[q] = dat[ls[q]] + dat[rs[q]];
	return q;
}
int query(int u, int l, int r, int ql, int qr) {
	if(!u) return 0;
	if(ql <= l && qr >= r) return dat[u];
	int tmp = 0;
	if(ql <= mid) tmp = query(ls[u], l, mid, ql, qr);
	if(qr > mid) tmp += query(rs[u], mid + 1, r, ql, qr);
	return tmp;
}
#undef mid 
signed main() {
	ios::sync_with_stdio(0), cin.tie(0);
//	freopen("ex_data.in", "r", stdin);
//	freopen("my.out", "w", stdout);
	cin >> n >> q;
	root[0] = build(1, n);
	for(int i = 1; i <= q; i ++) {
		int op, l, r, x;
		cin >> op >> l >> r;
		if(op == 1) {
			cin >> x;
			root[x + 1] = update(root[x], root[x + 1], 1, n, l, r);
		}
		else {
			int ll = 0, rr = i, ans = -1, mid;
			while(ll <= rr) {
				mid = ll + rr >> 1;
				if(query(root[mid], 1, n, l, r)) ll = mid + 1, ans = mid;
				else rr = mid - 1;
			}
			cout << ans << '\n';
		}
	}
	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 0ms
memory: 9708kb

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: 2ms
memory: 9780kb

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'