QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#641867#7444. rldcotElegia100 ✓284ms69936kbC++233.2kb2024-10-15 02:58:282024-10-15 02:58:28

Judging History

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

  • [2024-10-15 02:58:28]
  • 评测
  • 测评结果:100
  • 用时:284ms
  • 内存:69936kb
  • [2024-10-15 02:58:28]
  • 提交

answer

/*
 Every vectex will be counted in the union of several retangle.
 The sum of the rectangles is O(nlogn) and can be obtained through
 SGT merging.
 compute the union of each [dep] then done in O(nlog^2n + mlogn).
 */
#include <bits/stdc++.h>

typedef unsigned long long ull;

const int N = 100010, L = 18, M = 500010;

struct Node {
	int min, max, ls, rs;
} P[N * L];

int n;
int ans[M];
ull dep[N];
std::vector<std::pair<int, int>> g[N], qry[N], points[N];
std::unordered_map<ull, std::vector<std::pair<int, int>>> mp;

int nnode() { static int top; P[++top].min = n + 1; return top; }

int merge(int p, int q, int l, int r, std::vector<std::pair<int, int>>& rects) {
	if (!p || !q) return p ^ q;
	int mid = (l + r) >> 1;
	auto lv = std::max(std::make_pair(P[P[p].ls].max, 0), std::make_pair(P[P[q].ls].max, 1)),
	     rv = std::min(std::make_pair(P[P[p].rs].min, 0), std::make_pair(P[P[q].rs].min, 1));
	if (lv.second != rv.second && lv.first >= 1 && rv.first <= n) rects.emplace_back(lv.first, rv.first);
	P[p].min = std::min(P[p].min, P[q].min);
	P[p].max = std::max(P[p].max, P[q].max);
	P[p].ls = merge(P[p].ls, P[q].ls, l, mid, rects);
	P[p].rs = merge(P[p].rs, P[q].rs, mid + 1, r, rects);
	return p;
}

int ins(int o, int l, int r, int x) {
	if (!o) o = nnode();
	P[o].min = std::min(P[o].min, x); P[o].max = std::max(P[o].max, x);
	if (l == r) return o;
	int mid = (l + r) >> 1;
	if (x <= mid) P[o].ls = ins(P[o].ls, l, mid, x);
	else P[o].rs = ins(P[o].rs, mid + 1, r, x);
	return o;
}

int dfs(int u, int p) {
	int ret = 0;
	mp[dep[u]].emplace_back(u, u);
	for (const auto& pr : g[u]) {
		int v, d; std::tie(v, d) = pr; if (v == p) continue;
		dep[v] = dep[u] + d; int cur = dfs(v, u);
		ret = merge(ret, cur, 1, n, mp[dep[u]]);
	}
	ret = ins(ret, 1, n, u);
	return ret;
}

int fw[N];
void change(int k, int x) { for (; k <= n; k += k & -k) fw[k] += x; }
int query(int k) { int ret = 0; for (; k; k &= k - 1) ret += fw[k]; return ret; }

int main() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr); std::cout.tie(nullptr);

	int m; std::cin >> n >> m;
	for (int rep = 1; rep != n; ++rep) {
		int u, v, d; std::cin >> u >> v >> d;
		g[u].emplace_back(v, d);
		g[v].emplace_back(u, d);
	}
	for (int i = 1; i <= m; ++i) {
		int l, r; std::cin >> l >> r;
		qry[l].emplace_back(r, i);
	}

	P[0].min = n + 1;
	dfs(1, 0);
	for (auto& pr : mp) {
		auto& rects = pr.second;
		if (rects.empty()) continue;
		std::sort(rects.begin(), rects.end());
		std::vector<std::pair<int, int>> critical; critical.push_back(rects.back());
		for (int i = (int)rects.size() - 2; i >= 0; --i) if (rects[i].second < critical.back().second) critical.push_back(rects[i]);
		std::reverse(critical.begin(), critical.end());
		rects.clear();
		for (int i = 0; i != critical.size(); ++i) {
			points[critical[i].first].emplace_back(critical[i].second, 1);
			if (i) points[critical[i - 1].first].emplace_back(critical[i].second, -1);
		}
	}
	mp.clear();

	for (int i = n; i; --i) {
		for (const auto& pr : points[i]) change(pr.first, pr.second);
		for (const auto& pr : qry[i]) ans[pr.second] = query(pr.first);
	}
	for (int i = 1; i <= m; ++i) std::cout << ans[i] << '\n';

	return 0;
}

详细


Pretests


Final Tests

Test #1:

score: 5
Accepted
time: 2ms
memory: 7800kb

input:

100 99
62 11 -5
62 89 -8
89 66 -10
66 64 -9
89 65 2
11 98 -4
64 82 4
66 73 3
82 83 6
65 7 2
62 22 1
65 29 -9
89 42 -8
73 100 -5
65 93 -1
7 24 9
82 49 -6
64 44 8
11 18 4
29 5 5
66 56 -10
56 63 -5
100 34 -7
98 30 -10
73 96 -10
7 90 8
64 50 8
90 74 -4
82 87 5
73 88 6
66 58 -10
62 32 0
65 23 -10
29 12 1...

output:

1
28
7
9
18
13
21
1
32
25
8
8
19
17
18
18
12
16
34
22
15
14
15
23
37
41
8
8
14
13
5
28
11
23
10
37
15
1
37
15
7
4
24
13
16
23
22
20
21
17
17
15
5
25
20
19
12
37
1
24
22
3
21
10
17
7
18
27
34
7
19
28
30
30
16
11
11
3
27
15
15
34
32
28
15
18
1
8
12
17
33
16
21
14
33
15
12
27
34

result:

ok 99 numbers

Test #2:

score: 5
Accepted
time: 1ms
memory: 5736kb

input:

100 99
37 56 -33425126
37 1 -877848916
37 25 414902437
37 93 543690285
25 58 84143259
1 23 877848916
37 82 -287809646
23 10 -472533817
25 86 -882640213
86 4 -487426875
86 8 -931312160
1 16 894130728
58 60 934148052
37 64 -290158267
4 39 -979802293
16 95 731320900
16 21 857399681
16 49 -398574308
23 ...

output:

3
1
7
33
36
32
22
64
21
73
47
21
6
11
1
14
16
43
56
44
22
18
46
42
8
57
29
1
6
1
15
35
18
35
5
40
28
9
45
34
42
15
3
1
11
13
22
56
28
17
85
42
56
48
8
6
38
8
52
72
27
13
50
41
63
26
39
57
34
3
55
34
23
28
47
1
15
46
6
11
5
43
49
66
7
20
17
35
6
13
57
71
35
12
56
3
12
41
15

result:

ok 99 numbers

Test #3:

score: 5
Accepted
time: 6ms
memory: 11456kb

input:

5000 4999
876 3519 117316562
876 2076 -821917632
876 4112 45313017
876 1366 -530944154
1366 865 274269389
865 3146 -413493167
876 4885 -70219503
3519 1036 304876272
3146 4535 -976601513
876 4760 424912662
4885 736 856554066
1036 141 -370659484
4760 588 -264305039
865 2081 644590500
865 3368 -4298207...

output:

2543
39
3808
1405
265
1965
1331
989
2451
1874
327
539
1406
2791
1363
1879
688
2155
1244
176
2053
1136
122
202
885
859
246
778
2082
536
837
247
4059
661
200
1110
1141
869
3540
3104
1053
1341
3958
3107
217
491
4088
1549
654
1191
31
2043
858
1737
735
1686
1567
748
718
1004
529
1648
2702
4537
635
2100
9...

result:

ok 4999 numbers

Test #4:

score: 5
Accepted
time: 6ms
memory: 9472kb

input:

5000 4999
3792 3897 423
3897 1740 559
3792 3095 -749
3095 3282 -341
3897 4671 118
4671 3040 -373
3897 1137 890
3095 1268 -809
1137 4293 289
3897 3097 -332
1268 1060 598
1060 629 -966
629 4741 553
3282 4377 507
4293 873 -484
873 343 -46
629 1475 -400
3792 328 902
1475 927 291
927 4000 -690
343 3011 -...

output:

306
661
2275
604
2475
576
68
1810
876
305
730
3105
1854
1687
2044
432
63
2921
293
3079
831
10
2818
1412
532
2582
1009
2843
1719
1716
562
2336
796
1865
2569
1095
1685
1455
2529
2117
2267
15
2510
2946
806
620
2169
3200
1508
2429
1945
372
3121
1913
1991
362
1067
599
244
870
2453
2034
124
241
120
423
24...

result:

ok 4999 numbers

Test #5:

score: 5
Accepted
time: 9ms
memory: 11564kb

input:

5000 4999
882 3928 282751395
3928 2121 84246268
3928 478 592840766
2121 1945 495023455
3928 180 45799778
3928 3294 472612557
1945 1539 292986171
2121 3634 304926640
882 4363 231052615
3634 1709 282277794
1539 348 254583408
1709 4059 368255757
2121 3637 810488627
4059 3521 257973651
3521 2562 1509469...

output:

3873
462
2060
4829
2237
587
463
1365
1521
516
20
2921
776
2224
3230
405
403
924
127
1047
28
433
96
3299
438
1085
2484
71
1446
645
2140
2184
1331
2185
1451
3013
831
2685
1432
2071
3442
2392
832
1523
750
316
2320
249
2121
2264
1906
1999
1179
3009
236
2084
985
2407
1736
939
1868
2348
1545
1930
47
1958
...

result:

ok 4999 numbers

Test #6:

score: 5
Accepted
time: 4ms
memory: 11420kb

input:

5000 4999
1507 3069 3527
3069 3095 -9590
3095 4842 -6770
1507 632 7634
632 3393 -7890
1507 2660 -1522
3069 3598 -6920
3393 1875 3176
3095 3995 4985
632 4710 -3510
3095 4356 5190
4356 4528 -1875
4356 80 -8903
3095 1147 2348
4710 4805 -1858
4528 3929 4976
4805 4716 2667
3069 946 -8927
4710 2860 5870
8...

output:

4678
4719
4699
4689
4693
4762
4678
4699
4735
4653
4745
4690
4658
4704
4684
4670
4733
4695
4672
4653
4697
4733
4700
4655
4696
4744
4712
4663
4744
4696
4691
4745
4702
4701
4716
4737
4754
4680
4692
4686
4708
4713
4717
4680
4688
4669
4697
4764
4714
4704
4701
4754
4659
4701
4701
4724
4681
4736
4714
4704
...

result:

ok 4999 numbers

Test #7:

score: 5
Accepted
time: 86ms
memory: 36616kb

input:

50000 49999
28543 17017 98022
17017 42826 20726
42826 2445 49643
28543 17948 5277
17948 46938 -220
46938 32802 51890
32802 14389 -7451
14389 11344 -4392
11344 5010 4312
5010 9928 53064
9928 15769 29588
15769 21594 19572
21594 10020 89784
10020 36292 6905
36292 39666 23856
39666 17518 67733
42826 347...

output:

40799
32113
18977
3117
12009
71
10434
3023
14138
13582
13334
10765
9110
1327
2591
2434
9482
7321
4962
1236
9958
30925
338
2168
3113
20048
5476
32727
1097
30314
18825
16896
472
1669
3959
13788
1983
18341
633
16921
1726
3385
1454
5994
4933
23330
34441
27809
14669
25543
8572
2673
10266
33988
32015
3651...

result:

ok 49999 numbers

Test #8:

score: 5
Accepted
time: 77ms
memory: 32308kb

input:

50000 49999
1391 22386 47
1391 45769 6
1391 15535 86
15535 48735 -99
48735 40714 -31
22386 38631 25
38631 35750 -24
35750 29613 16
29613 5199 -25
5199 49973 19
49973 41966 -25
41966 30206 46
30206 5830 -77
5830 31305 -93
31305 30946 -26
30946 43271 -39
43271 12182 -50
12182 47941 29
47941 23870 23
4...

output:

1941
1963
1932
1936
1953
1955
1923
1928
1940
1948
1931
1944
1947
1921
1943
1952
1949
1937
1931
1954
1945
1944
1948
1950
1929
1956
1945
1935
1932
1933
1945
1926
1932
1920
1933
1930
1946
1938
1951
1933
1956
1947
1948
1934
1941
1932
1949
1948
1944
1949
1950
1943
1922
1934
1936
1944
1930
1947
1959
1950
...

result:

ok 49999 numbers

Test #9:

score: 5
Accepted
time: 86ms
memory: 36616kb

input:

50000 49999
47689 18519 -101548786
18519 4870 118680825
4870 30744 881553913
18519 22282 -435727671
22282 27875 819130228
27875 25223 204438576
25223 45899 220923301
45899 7043 -560784147
18519 18652 66226294
18652 27944 85044965
27944 2280 68694727
2280 19693 810360687
18519 30928 -797861623
30928 ...

output:

44049
44799
45787
44351
43676
44880
47218
46544
46141
44314
49229
46498
44012
43945
41883
46785
45211
42429
47284
44203
45972
42657
48754
47677
45373
43618
46954
46444
44562
46257
46564
44119
44804
44953
47948
44696
45903
42876
44062
43520
43466
47124
47635
42918
48192
49067
45173
46542
44105
46387
...

result:

ok 49999 numbers

Test #10:

score: 5
Accepted
time: 69ms
memory: 33144kb

input:

50000 49999
22614 44396 734026505
44396 45044 -574053935
45044 3501 147984457
3501 46353 -777744427
46353 40970 484373035
40970 21085 -671528355
21085 40612 -256173294
40612 37624 -769918341
37624 32467 54471988
32467 5573 906602800
5573 31208 39798831
31208 28871 286762042
28871 44683 -991851574
44...

output:

47946
45571
44821
47221
45688
47756
45082
45879
48722
46557
46103
43405
47056
46980
47061
49064
47373
45950
45815
49097
46515
45745
48402
48709
45417
46500
47668
47190
47111
48571
48047
47031
47364
48962
48444
46694
43694
46529
47205
48362
46630
46357
46848
44149
44086
45375
43739
47777
48327
44956
...

result:

ok 49999 numbers

Test #11:

score: 5
Accepted
time: 181ms
memory: 56536kb

input:

100000 499999
68557 60748 1
60748 67092 1
67092 60741 1
60741 94513 1
94513 43807 1
43807 17655 1
17655 31712 1
31712 41314 1
41314 70546 1
70546 98638 1
98638 79927 1
79927 30210 1
30210 33623 1
33623 76963 1
76963 61376 1
61376 94592 1
94592 62406 1
62406 76984 1
76984 65489 1
65489 98064 1
98064 ...

output:

5049
5047
5050
5045
5048
5049
5051
5049
5043
5043
5054
5043
5053
5043
5049
5054
5049
5043
5048
5043
5045
5049
5045
5044
5050
5041
5042
5049
5051
5050
5050
5047
5042
5042
5052
5051
5046
5045
5047
5051
5051
5039
5045
5049
5041
5054
5050
5049
5049
5051
5049
5041
5043
5053
5047
5049
5048
5050
5045
5048
...

result:

ok 499999 numbers

Test #12:

score: 5
Accepted
time: 242ms
memory: 59908kb

input:

100000 499999
1639 29781 1
29781 17380 1
17380 97020 1
97020 83569 1
83569 10110 1
10110 68724 1
68724 18586 1
18586 22484 1
68724 3768 1
3768 3210 1
3210 67286 1
67286 85203 1
85203 20400 1
20400 58907 1
3768 31497 1
31497 77841 1
77841 11051 1
18586 56669 1
56669 87732 1
87732 36371 1
36371 16727 ...

output:

75
74
75
75
75
73
75
75
74
74
74
74
74
74
74
75
75
75
75
74
74
75
75
71
74
74
74
75
75
75
74
75
75
75
75
74
75
74
75
74
74
73
74
75
75
75
75
74
74
74
75
74
75
74
74
75
74
74
74
74
75
75
73
74
73
75
73
75
73
75
74
74
75
72
75
75
74
75
75
72
74
74
75
75
74
75
74
72
72
74
71
74
74
75
74
74
75
74
75
75
...

result:

ok 499999 numbers

Test #13:

score: 5
Accepted
time: 265ms
memory: 60524kb

input:

100000 499999
34375 86434 1
86434 3362 1
3362 94790 1
94790 21710 1
21710 27418 1
86434 39689 1
39689 20651 1
20651 64980 1
64980 12228 1
12228 39401 1
27418 72806 1
39689 84176 1
84176 27179 1
27179 40891 1
20651 92092 1
92092 5025 1
5025 44465 1
44465 81432 1
81432 67840 1
67840 57231 1
57231 7159...

output:

71
68
65
71
58
65
70
65
51
67
69
59
62
71
70
69
70
68
65
66
63
71
71
54
70
66
61
69
65
69
71
66
70
71
70
65
60
65
71
65
71
63
62
65
71
67
69
55
61
67
70
66
56
71
71
69
59
67
68
72
71
64
71
70
66
61
70
67
71
70
60
66
71
69
71
68
69
66
68
63
71
62
57
71
71
69
65
70
70
65
65
65
70
69
69
68
70
65
64
71
...

result:

ok 499999 numbers

Test #14:

score: 5
Accepted
time: 222ms
memory: 58172kb

input:

100000 499999
46085 30675 1
30675 71652 1
71652 48365 1
48365 587 1
587 76053 1
76053 32407 1
32407 59317 1
59317 12067 1
59317 6528 1
6528 56738 1
48365 30206 1
30675 58854 1
58854 47823 1
47823 76155 1
76155 66370 1
66370 17980 1
17980 55051 1
17980 94931 1
94931 89349 1
89349 50580 1
50580 6005 1...

output:

171
171
169
171
172
172
170
172
169
169
170
171
175
173
175
171
170
175
170
170
175
174
173
171
171
171
171
173
173
170
172
172
172
172
170
171
174
169
174
171
173
171
172
172
169
170
171
170
171
173
175
172
170
172
173
172
173
170
175
171
173
171
173
171
171
173
175
172
170
171
173
171
170
169
172
...

result:

ok 499999 numbers

Test #15:

score: 5
Accepted
time: 283ms
memory: 69936kb

input:

100000 499999
20451 19478 642
19478 81744 4627
81744 59694 5795
59694 99426 -310
99426 5111 5007
5111 55779 -7724
55779 13425 9393
13425 32133 7330
32133 14060 -3205
14060 56450 -8168
56450 21480 -4277
21480 56575 3073
56575 76157 -2986
76157 62379 9013
62379 85585 1191
85585 35458 -4374
35458 3988 ...

output:

65266
61352
60629
60931
62845
63152
57132
58525
58662
51506
57774
63608
61225
55587
56920
61720
62369
53242
63541
59076
61476
58349
66032
52172
58110
59986
62953
64462
60554
60236
61527
63061
60333
65251
62811
64362
62648
63911
62561
56236
57488
68309
58934
64766
64131
58235
59343
66134
60995
61305
...

result:

ok 499999 numbers

Test #16:

score: 5
Accepted
time: 269ms
memory: 65848kb

input:

100000 499999
62205 24801 -62206
24801 80722 -954108
62205 49456 -62206
49456 11094 62206
11094 10386 -627510
62205 94471 219365
94471 87734 -98218
87734 93726 98218
93726 26651 -735226
26651 77595 735226
77595 78734 -741167
78734 70782 600552
70782 22846 -600552
22846 15263 600552
80722 66378 95410...

output:

43860
42353
36708
39166
42571
38394
40946
42995
43064
39108
38862
41537
40227
39747
42466
42152
39648
41857
41453
40697
39585
43231
37453
39656
42337
42668
41759
39593
40076
44480
37524
40892
44461
41995
39561
40361
43379
39482
40539
41627
40041
41845
35709
43211
43106
39921
38087
35909
40238
38176
...

result:

ok 499999 numbers

Test #17:

score: 5
Accepted
time: 284ms
memory: 67256kb

input:

100000 499999
65675 77455 353062579
77455 37615 -275623342
37615 67788 938075854
67788 2238 -938075854
67788 21871 213107287
2238 68047 458737969
68047 45815 -458737969
45815 36170 458737969
36170 35531 -989820394
35531 70108 989820394
70108 90805 -574502962
90805 23286 185052275
36170 16690 -780330...

output:

32953
28006
35439
30323
35281
36900
21898
30189
40120
32906
31701
34395
23500
30847
44025
31352
25036
36612
30819
35308
34660
28980
33951
37677
33136
27944
38983
33986
22925
34462
36989
33470
34156
32231
41400
32005
26571
36974
28475
39849
34933
36752
29154
31148
38566
27193
30338
28105
33902
39934
...

result:

ok 499999 numbers

Test #18:

score: 5
Accepted
time: 213ms
memory: 62496kb

input:

100000 499999
22686 25086 -709837952
25086 40129 814501909
40129 16722 -814501909
16722 78290 877592649
78290 90922 -877592649
90922 79563 877592649
79563 55572 -877592649
55572 45256 877592649
45256 89548 -958917012
89548 95688 958917012
95688 84159 -958917012
84159 21676 958917012
21676 73960 -871...

output:

42339
44625
42087
43001
44130
42258
45370
43865
42273
44165
44061
44333
44772
45026
44133
45752
43509
42502
43611
42656
44444
43832
44605
42666
44541
41730
45202
42657
43590
43807
43025
42966
42814
43088
42848
45202
44139
42745
42211
41504
43591
44637
44586
43550
41679
42492
44694
42814
42631
43940
...

result:

ok 499999 numbers

Test #19:

score: 5
Accepted
time: 165ms
memory: 56592kb

input:

100000 499999
96900 41954 -96901
41954 98151 -550471687
98151 5654 550471687
5654 14166 -550471687
14166 93148 -484179267
93148 84881 -955638816
84881 53166 955638816
53166 30837 -955638816
30837 57043 955638816
57043 13003 235324875
13003 82543 -673860924
82543 61159 673860924
61159 54181 -67386092...

output:

43341
44042
41991
42621
41859
42526
42797
42830
41802
44745
42003
43968
44287
42688
44274
41192
42514
40893
42719
44626
42119
42553
44895
41705
42777
44452
43390
43343
42365
42938
43111
41622
41930
44379
44168
43554
41457
43208
43695
41506
45439
43165
43575
42095
40423
41754
44275
45039
42955
41241
...

result:

ok 499999 numbers

Test #20:

score: 5
Accepted
time: 216ms
memory: 55296kb

input:

100000 499999
35298 73116 -35299
73116 66523 -640229255
66523 49903 640229255
49903 43352 -640229255
43352 53156 640229255
53156 21662 -132043039
21662 44684 730483005
44684 66601 -730483005
66601 11719 730483005
11719 49011 434213061
49011 53634 -813739159
53634 4019 813739159
4019 1943 -813739159
...

output:

16869
3906
8397
15617
7265
33166
18041
1240
34559
1204
13561
30078
8060
33396
12234
83
9940
25335
21440
23985
17425
41223
10262
17148
9654
2739
26217
2578
12133
16190
27823
20037
18670
15553
7409
29890
22635
38694
19713
13150
1514
16907
26250
26116
37154
3953
3694
17796
8654
27237
27898
16563
26477
...

result:

ok 499999 numbers