QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#102854#4909. 《关于因为与去年互测zjk撞题而不得不改题这回事》FISHER_0 1661ms409848kbC++142.6kb2023-05-03 19:00:112023-05-03 19:00:14

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-05-03 19:00:14]
  • 评测
  • 测评结果:0
  • 用时:1661ms
  • 内存:409848kb
  • [2023-05-03 19:00:11]
  • 提交

answer

#include <bits/stdc++.h>
#define fi first
#define se second
#define PB push_back
#define EB emplace_back
using namespace std;
typedef long long i64;
const int maxn = 1000000;
vector<int> g[maxn + 5];
i64 a[maxn + 5];
int dep[maxn + 5];
int siz[maxn + 5];
int son[maxn + 5];
int f[maxn + 5];
void dfs1(int u, int fa) {
	f[u] = fa;
	dep[u] = dep[fa] + 1;
	siz[u] = 1;
	for (int v : g[u]) {
		if (v == fa) continue;
		dfs1(v, u);
		siz[u] += siz[v];
		if (siz[v] > siz[son[u]]) son[u] = v;
	}
}
int tp[maxn + 5];
int id[maxn + 5], rnk[maxn + 5], stamp;
void dfs2(int u, int fa, int t) {
	tp[u] = t;
	rnk[id[u] = ++stamp] = u;
	if (son[u]) dfs2(son[u], u, t);
	for (int v : g[u])
		if (v != fa && v != son[u]) dfs2(v, u, v);
}
pair<i64, int> mx[maxn + 5][20];
int lg2[maxn + 5];
inline int queryMx(int l, int r) {
	int t = lg2[r - l + 1];
	return max(mx[l][t], mx[r - (1 << t) + 1][t]).se;
}
struct seg {
	int l, r, id;
	bool operator<(const seg& b) const { return a[rnk[id]] > a[rnk[b.id]]; }
};
set<seg> s;
inline void ins(int l, int r) { s.insert({l, r, queryMx(l, r)}); }
void init(int x, int y) {
	while (tp[x] != tp[y]) {
		if (dep[tp[x]] < dep[tp[y]]) swap(x, y);
		ins(id[tp[x]], id[x]);
		x = f[tp[x]];
	}
	if (dep[x] < dep[y]) swap(x, y);
	ins(id[y], id[x]);
}
i64 pop() {
	if (s.empty()) return 0;
	seg nw = *s.begin();
	s.erase(nw);
	if (nw.l < nw.id) ins(nw.l, nw.id - 1);
	if (nw.id < nw.r) ins(nw.id + 1, nw.r);
	return a[rnk[nw.id]];
}
inline bool get(i64 v, int w) { return (v >> w) & 1; }
int main() {
	int n, q;
	scanf("%d", &n);
	for (int i = 1; i < n; i++) {
		int u, v;
		scanf("%d%d", &u, &v);
		g[u].PB(v), g[v].PB(u);
	}
	for (int i = 1; i <= n; i++) scanf("%lld", &a[i]);
	dfs1(1, 0), dfs2(1, 0, 1);
	for (int i = 2; i <= n; i++) lg2[i] = lg2[i >> 1] + 1;
	for (int i = n; i; i--) {
		mx[i][0] = {a[rnk[i]], i};
		for (int j = 1; i + (1 << j) - 1 <= n; j++) mx[i][j] = max(mx[i][j - 1], mx[i + (1 << (j - 1))][j - 1]);
	}
	scanf("%d", &q);
	i64 ans = 0;
	for (int i = 1; i <= q; i++) {
		int x, y, m;
		scanf("%d%d%d", &x, &y, &m);
		x = (x ^ ans) % n + 1, y = (y ^ ans) % n + 1;
		init(x, y);
		vector<i64> L;
		ans = 0;
		for (int j = 61; ~j; j--) {
			int c = 0;
			for (i64 o : L) c += get(o, j);
			while (c < m) {
				i64 o = pop();
				if ((o & ans) != ans) break;
				L.PB(o);
				if (get(o, j)) c++;
				else break;
			}
			if (c >= m) {
				vector<i64> nL; 
				for (i64 o : L)
					if (get(o, j)) nL.PB(o);
				L.swap(nL);
				ans |= 1LL << j;
			}
		}
		printf("%lld\n", ans);
		s.clear();
	}
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 5
Accepted
time: 3ms
memory: 27580kb

input:

931
184 700
485 184
419 485
386 419
308 386
114 308
301 114
598 301
120 598
144 120
595 144
812 595
236 812
7 236
543 7
327 543
858 327
68 858
177 68
398 177
899 398
408 899
848 408
202 848
269 202
304 269
540 304
647 540
672 647
314 672
157 314
241 157
745 241
300 745
343 300
92 343
117 92
30 117
2...

output:

1152921504606846976

result:

ok 1 number(s): "1152921504606846976"

Test #2:

score: 0
Accepted
time: 3ms
memory: 28728kb

input:

915
911 748
514 911
805 514
729 805
753 729
40 753
671 40
664 671
94 664
61 94
726 61
690 726
597 690
216 597
644 216
533 644
605 533
22 605
307 22
455 307
377 455
114 377
660 114
589 660
569 589
409 569
408 409
821 408
736 821
599 736
60 599
475 60
57 475
412 57
85 412
524 85
846 524
595 846
262 59...

output:

288230376151711752

result:

ok 1 number(s): "288230376151711752"

Test #3:

score: 0
Accepted
time: 10ms
memory: 28120kb

input:

930
111 896
637 111
559 637
289 559
103 289
759 103
341 759
605 341
778 605
154 778
169 154
721 169
631 721
741 631
750 741
344 750
641 344
639 641
769 639
48 769
389 48
25 389
70 25
508 70
185 508
199 185
602 199
89 602
473 89
565 473
373 565
865 373
867 865
658 867
271 658
685 271
269 685
317 269
...

output:

268435456

result:

ok 1 number(s): "268435456"

Test #4:

score: 0
Accepted
time: 4ms
memory: 30444kb

input:

948
537 716
933 537
605 933
563 605
801 563
860 801
19 860
717 19
908 717
820 908
885 820
693 885
69 693
263 69
129 263
295 129
880 295
303 880
12 303
299 12
1 299
421 1
312 421
720 312
100 720
438 100
380 438
386 380
223 386
627 223
293 627
387 293
709 387
193 709
640 193
906 640
34 906
405 34
790 ...

output:

1152921504606846976

result:

ok 1 number(s): "1152921504606846976"

Test #5:

score: 0
Accepted
time: 3ms
memory: 27664kb

input:

928
626 381
247 626
97 247
358 97
886 358
898 886
736 898
776 736
75 776
123 75
512 123
223 512
355 223
530 355
95 530
523 95
903 523
144 903
324 144
382 324
487 382
127 487
538 127
171 538
836 171
129 836
259 129
914 259
574 914
7 574
141 7
246 141
65 246
482 65
865 482
265 865
690 265
925 690
449 ...

output:

134217728

result:

ok 1 number(s): "134217728"

Test #6:

score: -5
Wrong Answer
time: 0ms
memory: 28136kb

input:

941
87 448
396 87
398 396
623 398
837 623
234 837
896 234
258 896
700 258
52 700
27 52
515 27
308 515
774 308
76 774
21 76
753 21
493 753
902 493
878 902
58 878
146 58
342 146
414 342
312 414
621 312
88 621
460 88
683 460
150 683
845 150
535 845
467 535
326 467
247 326
280 247
474 280
124 474
22 124...

output:

274877906944

result:

wrong answer 1st numbers differ - expected: '1152921504606846976', found: '274877906944'

Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Wrong Answer

Test #17:

score: 10
Accepted
time: 67ms
memory: 78064kb

input:

99115
98506 98914
1961 98506
45808 1961
23027 45808
16655 23027
66393 16655
77250 66393
68284 77250
53684 68284
21189 53684
84955 21189
73464 84955
47574 73464
40651 47574
21101 40651
6589 21101
59680 6589
6185 59680
25529 6185
207 25529
33286 207
98459 33286
92565 98459
85446 92565
97388 85446
1630...

output:

2050

result:

ok 1 number(s): "2050"

Test #18:

score: 0
Accepted
time: 70ms
memory: 80436kb

input:

99546
79711 12863
50539 79711
13393 50539
27933 13393
13465 27933
79157 13465
53742 79157
51081 53742
32220 51081
21079 32220
85595 21079
50222 85595
14565 50222
4589 14565
13763 4589
58913 13763
93835 58913
34953 93835
2185 34953
10246 2185
64420 10246
44274 64420
63093 44274
8007 63093
85947 8007
...

output:

512

result:

ok 1 number(s): "512"

Test #19:

score: -10
Wrong Answer
time: 85ms
memory: 81172kb

input:

99762
90013 76047
42293 90013
7801 42293
75274 7801
59320 75274
60896 59320
10435 60896
5384 10435
34648 5384
15596 34648
92041 15596
67457 92041
20760 67457
65611 20760
81462 65611
38984 81462
17583 38984
83787 17583
59980 83787
71477 59980
31143 71477
92168 31143
71205 92168
69348 71205
6111 69348...

output:

1024

result:

wrong answer 1st numbers differ - expected: '16386', found: '1024'

Subtask #4:

score: 0
Skipped

Dependency #1:

0%

Subtask #5:

score: 0
Skipped

Dependency #1:

0%

Subtask #6:

score: 0
Skipped

Dependency #5:

0%

Subtask #7:

score: 0
Wrong Answer

Test #45:

score: 0
Wrong Answer
time: 1661ms
memory: 409848kb

input:

996678
2 1
3 1
4 1
5 1
6 3
7 5
8 5
9 5
10 7
11 8
12 9
13 1
14 2
15 7
16 4
17 5
18 17
19 16
20 2
21 1
22 1
23 9
24 17
25 19
26 10
27 9
28 7
29 25
30 25
31 4
32 11
33 31
34 21
35 13
36 19
37 25
38 10
39 11
40 20
41 35
42 1
43 19
44 20
45 41
46 1
47 19
48 5
49 28
50 21
51 33
52 7
53 14
54 21
55 20
56 1...

output:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
8
0
0
0
0
0
0
0
4096
0
0
0
0
4096
0
0
0
0
0
0
0
0
0
4
0
0
0
0
32
64
0
0
0
4
2
0
258
0
0
0
0
131072
0
0
0
0
0
0
0
0
0
0
0
0
0
0
4096
2
0
0
0
0
0
512
0
4
0
0
4096
64
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
512
0
0
36
0
0
0
0
0
0
0
2
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0...

result:

wrong answer 1st numbers differ - expected: '4', found: '0'

Subtask #8:

score: 0
Skipped

Dependency #1:

0%