QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#589390 | #6409. Classical Data Structure Problem | Tobo# | TL | 2032ms | 38960kb | C++20 | 3.8kb | 2024-09-25 17:38:54 | 2024-09-25 17:38:59 |
Judging History
answer
#include <bits/stdc++.h>
#define int unsigned
using namespace std;
const int N = 1e6 + 10, mod = 1 << 30;
int n, m, all, tot, root;
mt19937 rnd(time(0));
int val[N], siz[N], tag[N], w[N], sum[N], ch[N][2], b[N];
int tree_siz[N];
int newnode(int x, int s, int l)
{
int ret = ++tot;
w[ret] = rnd(), b[ret] = l;
val[ret] = x, siz[ret] = s;
tree_siz[ret] = s;
sum[ret] = x * s;
return ret;
}
void pushdown(int cur)
{
if (!tag[cur])
return;
if (int lc = ch[cur][0]; lc)
{
tag[lc] += tag[cur];
sum[lc] += tree_siz[lc] * tag[cur];
val[lc] += tag[cur];
}
if (int rc = ch[cur][1]; rc)
{
tag[rc] += tag[cur];
sum[rc] += tree_siz[rc] * tag[cur];
val[rc] += tag[cur];
}
tag[cur] = 0;
}
void pushup(int cur)
{
tree_siz[cur] = siz[cur] + tree_siz[ch[cur][0]] + tree_siz[ch[cur][1]];
sum[cur] = val[cur] * siz[cur] + sum[ch[cur][0]] + sum[ch[cur][1]];
}
pair<int, int> split(int x, int z)
{
if (!x)
return {0, 0};
pushdown(x);
pair<int, int> ret;
if (z <= b[x])
{
ret = split(ch[x][0], z);
ch[x][0] = ret.second;
ret.second = x;
}
else
{
ret = split(ch[x][1], z);
ch[x][1] = ret.first;
ret.first = x;
}
pushup(x);
return ret;
}
int merge(int x, int y)
{
if (!x or !y)
return x | y;
pushdown(x), pushdown(y);
int ret;
if (w[x] < w[y])
{
ret = merge(ch[x][1], y);
ch[x][1] = ret;
ret = x;
}
else
{
ret = merge(x, ch[y][0]);
ch[y][0] = ret;
ret = y;
}
pushup(ret);
return ret;
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
all = 1 << m;
root = newnode(0, all, 0);
int x = 0;
for (int i = 1, p, q; i <= n; i++)
{
cin >> p >> q;
p = (p + x) % all, q = (q + x) % all;
if (p > q)
swap(p, q);
auto dfs = [&](auto &dfs, int x, int v) -> int
{
if (!x)
return 0;
pushdown(x);
if (ch[x][1])
{
ch[x][1] = dfs(dfs, ch[x][1], v);
pushup(x);
return x;
}
if (b[x] + siz[x] == v)
return x;
int w_cur = rnd();
if (w_cur > w[x])
{
int cur = ++tot;
w[cur] = w_cur;
val[cur] = val[x];
siz[cur] = siz[x] - (v - b[x]);
b[cur] = v;
siz[x] = v - b[x], ch[x][1] = cur;
pushup(x), pushup(cur);
return x;
}
else
{
int cur = ++tot;
w[cur] = w_cur;
val[cur] = val[x];
siz[cur] = siz[x] - (v - b[x]);
b[cur] = v;
siz[x] = v - b[x];
ch[cur][0] = x;
pushup(x), pushup(cur);
return cur;
}
assert(false);
};
auto r1 = split(root, p);
r1.first = dfs(dfs, r1.first, p);
root = merge(r1.first, r1.second);
auto r2 = split(root, q + 1);
r2.first = dfs(dfs, r2.first, q + 1);
root = merge(r2.first, r2.second);
r1 = split(root, p), r2 = split(r1.second, q + 1);
tag[r2.first] += i;
val[r2.first] += i;
sum[r2.first] += i * tree_siz[r2.first];
x += sum[r2.first];
root = merge(r1.first, merge(r2.first, r2.second));
}
cout << x % mod << '\n';
}
/*
5 2
2 1
1 3
3 2
1 0
0 2
*/
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 13964kb
input:
5 2 2 1 1 3 3 2 1 0 0 2
output:
87
result:
ok 1 number(s): "87"
Test #2:
score: 0
Accepted
time: 2ms
memory: 13968kb
input:
1 1 1 1
output:
1
result:
ok 1 number(s): "1"
Test #3:
score: 0
Accepted
time: 0ms
memory: 13984kb
input:
1 2 3 1
output:
3
result:
ok 1 number(s): "3"
Test #4:
score: 0
Accepted
time: 0ms
memory: 13972kb
input:
1 5 31 15
output:
17
result:
ok 1 number(s): "17"
Test #5:
score: 0
Accepted
time: 1ms
memory: 14052kb
input:
1 20 366738 218765
output:
147974
result:
ok 1 number(s): "147974"
Test #6:
score: 0
Accepted
time: 1ms
memory: 14040kb
input:
1 30 86669484 41969116
output:
44700369
result:
ok 1 number(s): "44700369"
Test #7:
score: 0
Accepted
time: 1ms
memory: 13976kb
input:
10 5 20 31 2 2 14 18 13 25 26 4 22 9 15 9 19 16 15 27 9 20
output:
1414
result:
ok 1 number(s): "1414"
Test #8:
score: 0
Accepted
time: 1ms
memory: 13960kb
input:
100 10 245 987 817 813 743 560 548 504 116 479 223 199 775 998 126 542 791 823 96 318 69 349 0 584 245 601 119 513 93 820 115 307 838 978 249 767 433 287 240 8 22 683 169 720 395 592 903 866 919 652 510 563 858 345 938 250 550 239 981 7 784 926 212 644 272 365 490 871 470 987 571 53 65 593 515 370 1...
output:
20383734
result:
ok 1 number(s): "20383734"
Test #9:
score: 0
Accepted
time: 1ms
memory: 14112kb
input:
1000 1 0 1 1 0 1 0 1 0 1 0 0 1 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 1 0 1 1 1 0 1 0 1 0 0 1 1 1 0 0 1 1 1 0 0 0 1 0 0 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 0 0 1 1 1 0 1 0 0 1 1 1 1 0 1 0 0 0 1 0 1 1 1 1 0 1 0 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 0 0 1 0 0 0 1 0 0 0 0 1 1 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 0 0 0 0 0 1 1 1 1 1...
output:
190098735
result:
ok 1 number(s): "190098735"
Test #10:
score: 0
Accepted
time: 2ms
memory: 13976kb
input:
1000 5 8 18 31 28 19 3 15 28 5 22 19 1 26 27 17 17 5 26 6 27 10 6 5 2 3 19 6 6 28 16 17 16 0 21 7 31 13 25 13 10 28 30 0 13 21 5 2 9 25 28 4 18 31 13 1 26 30 3 5 8 19 16 22 10 15 17 3 25 6 27 18 26 27 1 26 29 18 21 14 20 5 1 26 9 7 13 19 25 15 11 24 17 12 28 24 17 4 27 20 27 31 18 25 17 1 28 5 0 16 ...
output:
794181769
result:
ok 1 number(s): "794181769"
Test #11:
score: 0
Accepted
time: 0ms
memory: 14052kb
input:
1000 10 732 399 190 578 491 867 330 55 113 400 34 734 790 927 201 156 107 359 790 398 401 523 634 505 570 305 281 513 551 35 610 33 231 330 833 756 213 444 412 315 139 165 533 21 35 977 319 884 894 72 149 667 16 538 282 860 850 550 100 99 801 138 159 34 468 852 840 853 368 994 469 906 393 298 464 89...
output:
755182648
result:
ok 1 number(s): "755182648"
Test #12:
score: 0
Accepted
time: 9ms
memory: 14064kb
input:
5000 15 7705 10737 21186 31441 10307 825 19372 1969 32358 6343 22487 31897 12802 25210 17920 4297 5726 8409 28174 12489 16532 12646 9916 14917 19592 26927 23987 9279 26951 31081 3673 10505 20727 10730 28961 26581 11005 29624 13931 32180 29764 19108 23553 28977 30178 6537 25586 3041 15333 31927 4671 ...
output:
374742544
result:
ok 1 number(s): "374742544"
Test #13:
score: 0
Accepted
time: 20ms
memory: 14348kb
input:
10000 20 914013 637387 162942 785196 55799 893293 359726 714014 109456 559963 689320 161360 164737 25370 260018 436870 801394 34900 564741 620583 1008448 956143 788249 695007 633673 1020122 431990 397822 253241 746513 322933 927863 843120 378180 343689 583409 788822 249760 839003 753443 910418 20908...
output:
719391110
result:
ok 1 number(s): "719391110"
Test #14:
score: 0
Accepted
time: 310ms
memory: 20244kb
input:
100000 30 1063412225 224331901 116583527 514118426 121269548 678461017 856756753 250958443 1064104926 412721149 829078609 544244155 734000135 742933979 9127283 962205064 595091107 123655320 593251579 687018764 1052215261 661849950 297391487 243419322 105274358 526149321 1069300711 46673358 208918023...
output:
252791218
result:
ok 1 number(s): "252791218"
Test #15:
score: 0
Accepted
time: 706ms
memory: 31016kb
input:
200000 30 340892656 331749003 569148929 1001014926 169562315 65082998 783728999 371358574 1068579249 78668714 697845492 972638257 499257742 966955403 924540097 249425391 76210210 270676008 1055790206 117898225 186726707 639941146 774774929 469533012 608214477 15295274 30556605 466457599 892407954 78...
output:
220823398
result:
ok 1 number(s): "220823398"
Test #16:
score: 0
Accepted
time: 1114ms
memory: 33680kb
input:
300000 30 692114910 439166105 1021714331 414169601 217855081 525446803 710701245 491758705 1073053571 818358104 566612376 327290534 264515348 117235003 766211086 610387541 631071137 417696697 444587009 622519510 394979978 618032341 178416548 695646703 37412772 578183052 65554323 886241839 502156061 ...
output:
501248752
result:
ok 1 number(s): "501248752"
Test #17:
score: 0
Accepted
time: 1577ms
memory: 36524kb
input:
400000 30 1043337164 546583208 400537910 901066101 266147848 985810608 637673490 612158836 3786069 484305669 435379259 755684636 29772955 341256427 607882075 971349692 112190239 564717385 907125636 53398971 603233248 596123536 655799990 921760394 540352891 67329005 100552041 232284256 111904168 9990...
output:
828770668
result:
ok 1 number(s): "828770668"
Test #18:
score: 0
Accepted
time: 1920ms
memory: 38960kb
input:
500000 30 320817594 654000310 853103312 314220777 314440615 372432589 564645736 732558967 8260392 150253235 304146143 110336914 868772386 565277851 449553064 258570018 667051166 711738073 295922440 558020255 811486519 574214731 59441609 74132260 1043293010 630216783 135549759 652068497 795394100 298...
output:
906730214
result:
ok 1 number(s): "906730214"
Test #19:
score: 0
Accepted
time: 58ms
memory: 14040kb
input:
500000 1 0 1 0 0 1 0 1 0 0 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 0 0 1 0 1 1 0 0 1 1 0 1 1 1 1 1 0 0 1 0 0 0 0 1 1 1 1 0 0 1 0 0 1 1 0 0 1 1 0 1 1 0 0 1 1 1 0 1 1 0 0 1 1 0 1 1 1 1 1 0 0 1 0 0 0 0 0 1 1 1 1 1 1 0 0 1 1 1 1 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 1 1 0 1 1 0 1 1 0 1 1 0 1 0 0 1 0 0 0 1 0 0 1...
output:
181097888
result:
ok 1 number(s): "181097888"
Test #20:
score: 0
Accepted
time: 88ms
memory: 13980kb
input:
500000 2 1 2 0 1 0 2 3 3 2 1 2 3 0 2 3 2 2 3 1 3 0 2 1 1 1 1 3 1 3 1 2 3 1 2 3 0 3 3 0 2 3 3 0 3 0 0 1 3 1 2 1 3 2 0 2 1 1 2 1 3 3 0 2 1 1 2 3 3 1 3 0 2 3 2 0 0 3 0 1 1 2 2 0 2 2 1 2 1 1 2 2 3 1 3 2 2 1 3 1 0 0 0 0 1 1 1 3 3 0 1 1 3 0 3 1 2 2 1 2 1 2 1 1 3 2 3 1 0 2 3 3 0 0 1 0 1 3 1 2 1 3 0 2 1 0 0...
output:
687623855
result:
ok 1 number(s): "687623855"
Test #21:
score: 0
Accepted
time: 215ms
memory: 13976kb
input:
500000 5 14 22 17 2 15 11 17 5 17 15 22 3 11 31 2 28 12 3 15 31 22 24 20 3 30 10 14 25 4 24 4 27 23 10 8 23 27 30 2 0 23 19 7 17 9 12 0 17 18 15 16 8 25 4 21 17 1 15 28 16 0 17 6 10 12 25 27 14 4 10 13 4 2 7 11 0 26 14 5 31 5 3 3 23 25 9 30 13 8 27 4 17 31 3 22 17 20 28 0 10 19 3 6 28 8 27 18 15 25 ...
output:
622835418
result:
ok 1 number(s): "622835418"
Test #22:
score: 0
Accepted
time: 548ms
memory: 14060kb
input:
500000 10 856 970 406 443 765 933 624 432 886 497 85 266 923 446 574 385 406 670 919 782 980 995 653 372 306 566 872 763 820 655 940 777 912 341 566 196 377 90 112 151 791 392 683 663 265 918 544 653 478 477 865 495 731 163 1005 983 207 265 351 501 836 663 145 960 703 609 492 802 854 827 788 98 590 ...
output:
188485208
result:
ok 1 number(s): "188485208"
Test #23:
score: 0
Accepted
time: 1119ms
memory: 14496kb
input:
500000 15 27436 19759 17989 14016 29351 9027 22878 23375 493 27515 23549 24903 315 23061 25757 17058 1864 7051 30102 6834 11360 31682 17857 13340 18416 7677 14292 14102 31283 32432 29118 21540 3743 12654 29341 26640 17415 1416 9602 20812 8260 18798 2549 31524 31630 17713 19078 12150 27310 177 10790 ...
output:
1032744914
result:
ok 1 number(s): "1032744914"
Test #24:
score: 0
Accepted
time: 1905ms
memory: 33720kb
input:
500000 20 595399 816452 624541 904856 21003 135407 71017 55007 982408 852317 192118 714368 372925 504868 1038018 323825 533838 690687 615209 673098 374113 789997 887853 227012 666338 73589 1037373 185087 283957 874396 942111 213879 106795 840613 81434 235343 796353 760221 217814 465288 11787 68789 5...
output:
409536009
result:
ok 1 number(s): "409536009"
Test #25:
score: 0
Accepted
time: 2032ms
memory: 38780kb
input:
500000 25 19067802 14544791 25094922 28771765 5655376 16549409 5245489 11514410 2880479 5597148 27471827 6089281 15538101 25124497 7207909 15185410 5672258 7360080 20385827 2897907 25020895 25107624 25287245 8713330 30138363 25200774 19229689 28894790 14249446 6164467 29132724 3420898 10899764 28675...
output:
780249768
result:
ok 1 number(s): "780249768"
Test #26:
score: 0
Accepted
time: 1980ms
memory: 38856kb
input:
500000 28 152614559 168140428 64224198 121918464 122849778 83659627 217295184 192622378 261781773 101788852 214755856 129277082 195293407 29297446 93882848 198320685 259042706 149180743 166442363 41079386 101742327 253721117 26241171 237722709 122360149 203892353 33112297 72988388 192464090 15934624...
output:
436932928
result:
ok 1 number(s): "436932928"
Test #27:
score: 0
Accepted
time: 1993ms
memory: 38828kb
input:
500000 29 305277211 191845285 37424942 350623463 476394371 313785791 14606972 94335544 324808232 241585480 68251928 312262716 79998604 302043143 211912079 89952361 481571536 358561552 335121887 452003467 137868096 184768373 471982058 50585219 165555792 51394869 343655057 219487120 79326582 34132224 ...
output:
416804842
result:
ok 1 number(s): "416804842"
Test #28:
score: 0
Accepted
time: 1797ms
memory: 38876kb
input:
500000 30 7 536872004 889 536871096 536871568 1073741186 536868404 1073739135 4658 536877000 536884849 16144 536888745 15098 536888517 17983 536978817 109982 537163990 288696 537547118 678741 537975122 1104461 538406486 1536913 2109524 538980240 539586338 2712484 540166099 3292622 3885543 540760294 ...
output:
989783823
result:
ok 1 number(s): "989783823"
Test #29:
score: 0
Accepted
time: 1507ms
memory: 38868kb
input:
500000 30 468 1073741718 1073741099 1206 4842 7003 17066 22951 75088 83321 207729 198494 388308 401645 775699 760997 1288710 1305104 2045101 2026086 3070757 3092561 4531940 4509426 6265205 6288002 8339114 8362998 10874332 10844941 14401251 14371368 18465354 18430368 23782225 23819611 30212746 301748...
output:
1029936413
result:
ok 1 number(s): "1029936413"
Test #30:
score: 0
Accepted
time: 428ms
memory: 38816kb
input:
500000 30 536871041 536869433 536867584 536870869 536859154 536864895 536833034 536841108 536784571 536774850 536667633 536681246 536479578 536493292 536210275 536194680 535802605 535785238 535218905 535242521 534417522 534441596 533350923 533376400 532005002 531978923 530296444 530267965 528188514 ...
output:
188353798
result:
ok 1 number(s): "188353798"
Test #31:
score: -100
Time Limit Exceeded
input:
500000 30 1073741524 536869699 1073739422 536868836 1073737849 536863772 536854939 1073730790 1073706272 536830087 1073653849 536791702 536698515 1073580277 536542704 1073424225 536309854 1073189663 536076943 1072938371 535751099 1072633194 1072246521 535360912 534796944 1071681574 534238464 1071094...