QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#188344 | #4914. Slight Hope | hos_lyric# | 60 | 1870ms | 516052kb | C++14 | 6.3kb | 2023-09-25 19:14:53 | 2024-07-04 02:46:04 |
Judging History
answer
#include <cassert>
#include <cmath>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <functional>
#include <iostream>
#include <limits>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
using namespace std;
using Int = long long;
template <class T1, class T2> ostream &operator<<(ostream &os, const pair<T1, T2> &a) { return os << "(" << a.first << ", " << a.second << ")"; };
template <class T> ostream &operator<<(ostream &os, const vector<T> &as) { const int sz = as.size(); os << "["; for (int i = 0; i < sz; ++i) { if (i >= 256) { os << ", ..."; break; } if (i > 0) { os << ", "; } os << as[i]; } return os << "]"; }
template <class T> void pv(T a, T b) { for (T i = a; i != b; ++i) cerr << *i << " "; cerr << endl; }
template <class T> bool chmin(T &t, const T &f) { if (t > f) { t = f; return true; } return false; }
template <class T> bool chmax(T &t, const T &f) { if (t < f) { t = f; return true; } return false; }
#define COLOR(s) ("\x1b[" s "m")
////////////////////////////////////////////////////////////////////////////////
template <unsigned M_> struct ModInt {
static constexpr unsigned M = M_;
unsigned x;
constexpr ModInt() : x(0U) {}
constexpr ModInt(unsigned x_) : x(x_ % M) {}
constexpr ModInt(unsigned long long x_) : x(x_ % M) {}
constexpr ModInt(int x_) : x(((x_ %= static_cast<int>(M)) < 0) ? (x_ + static_cast<int>(M)) : x_) {}
constexpr ModInt(long long x_) : x(((x_ %= static_cast<long long>(M)) < 0) ? (x_ + static_cast<long long>(M)) : x_) {}
ModInt &operator+=(const ModInt &a) { x = ((x += a.x) >= M) ? (x - M) : x; return *this; }
ModInt &operator-=(const ModInt &a) { x = ((x -= a.x) >= M) ? (x + M) : x; return *this; }
ModInt &operator*=(const ModInt &a) { x = (static_cast<unsigned long long>(x) * a.x) % M; return *this; }
ModInt &operator/=(const ModInt &a) { return (*this *= a.inv()); }
ModInt pow(long long e) const {
if (e < 0) return inv().pow(-e);
ModInt a = *this, b = 1U; for (; e; e >>= 1) { if (e & 1) b *= a; a *= a; } return b;
}
ModInt inv() const {
unsigned a = M, b = x; int y = 0, z = 1;
for (; b; ) { const unsigned q = a / b; const unsigned c = a - q * b; a = b; b = c; const int w = y - static_cast<int>(q) * z; y = z; z = w; }
assert(a == 1U); return ModInt(y);
}
ModInt operator+() const { return *this; }
ModInt operator-() const { ModInt a; a.x = x ? (M - x) : 0U; return a; }
ModInt operator+(const ModInt &a) const { return (ModInt(*this) += a); }
ModInt operator-(const ModInt &a) const { return (ModInt(*this) -= a); }
ModInt operator*(const ModInt &a) const { return (ModInt(*this) *= a); }
ModInt operator/(const ModInt &a) const { return (ModInt(*this) /= a); }
template <class T> friend ModInt operator+(T a, const ModInt &b) { return (ModInt(a) += b); }
template <class T> friend ModInt operator-(T a, const ModInt &b) { return (ModInt(a) -= b); }
template <class T> friend ModInt operator*(T a, const ModInt &b) { return (ModInt(a) *= b); }
template <class T> friend ModInt operator/(T a, const ModInt &b) { return (ModInt(a) /= b); }
explicit operator bool() const { return x; }
bool operator==(const ModInt &a) const { return (x == a.x); }
bool operator!=(const ModInt &a) const { return (x != a.x); }
friend std::ostream &operator<<(std::ostream &os, const ModInt &a) { return os << a.x; }
};
////////////////////////////////////////////////////////////////////////////////
constexpr unsigned MO = 998244353;
using Mint = ModInt<MO>;
int N, Q;
vector<Mint> A;
vector<int> P;
Mint brute(int L, int R) {
static Mint dp[5010];
copy(A.begin() + L, A.begin() + R, dp + L);
Mint ans = 0;
for (int u = R; --u >= L; ) {
if (P[u] < L) {
ans += dp[u] * dp[u];
} else {
dp[P[u]] += dp[u];
}
}
return ans;
}
namespace sqr {
constexpr int E = 18;
constexpr int MAX_N = 250'010;
int pp[E][MAX_N];
// constexpr int K = 4;
constexpr int K = 500;
vector<Mint> f[501], g[501];
int zeit;
int app[MAX_N];
Mint fs[MAX_N];
void build() {
for (int u = 0; u < N; ++u) pp[0][u] = P[u];
for (int e = 0; e < E - 1; ++e) for (int u = 0; u < N; ++u) pp[e + 1][u] = (~pp[e][u]) ? pp[e][pp[e][u]] : -1;
for (int x = 0; x <= N / K; ++x) {
const int r = x * K;
f[x].assign(r + 1, 0);
g[x].assign(r + 1, 0);
for (int u = 0; u < r; ++u) f[x][u] = A[u];
for (int u = r; --u >= 1; ) f[x][P[u]] += f[x][u];
for (int u = 0; u < r; ++u) g[x][u + 1] = g[x][u] + f[x][u] * f[x][u];
}
#ifdef LOCAL
zeit = 0;
memset(app, 0, sizeof(app));
memset(fs, 0, sizeof(fs));
#endif
}
Mint query(int L, int R) {
++zeit;
const int M = lower_bound(P.begin() + L, P.begin() + R, L) - P.begin();
const int x = R / K;
const int r = x * K;
Mint ans = 0;
if (L < min(M, r)) {
ans += g[x][min(M, r)] - g[x][L];
}
for (int u = max(L, r); u < R; ++u) {
int v = u;
for (int e = E; --e >= 0; ) if (L <= pp[e][v]) v = pp[e][v];
if (app[v] != zeit) {
app[v] = zeit;
fs[v] = (v < r) ? f[x][v] : 0;
}
// cerr<<"u = "<<u<<": v = "<<v<<"; "<<fs[v]<<" -> "<<(fs[v]+A[u])<<endl;
ans += A[u] * (fs[v] + fs[v] + A[u]);
fs[v] += A[u];
}
return ans;
}
} // sqr
int main() {
for (; ~scanf("%d%d", &N, &Q); ) {
A.resize(N);
for (int u = 0; u < N; ++u) {
scanf("%u", &A[u].x);
}
P.resize(N);
for (int u = 1; u < N; ++u) {
scanf("%d", &P[u]);
--P[u];
}
P[0] = -1;
sqr::build();
int lst = 0;
for (int q = 0; q < Q; ++q) {
int L, R;
scanf("%d%d", &L, &R);
L ^= lst;
R ^= lst;
--L;
// cerr<<COLOR("33")<<"query ["<<L<<", "<<R<<")"<<COLOR()<<endl;
const Mint ans = sqr::query(L, R);
printf("%u\n", ans.x);
#ifdef LOCAL
if(N<=5000){
const Mint brt=brute(L,R);
if(brt!=ans)cerr<<L<<" "<<R<<": "<<brt<<" "<<ans<<endl;
assert(brt==ans);
}
#endif
#ifdef LOCAL
if(N==250000)continue;
#endif
lst = ans.x;
}
}
return 0;
}
詳細信息
Subtask #1:
score: 20
Accepted
Test #1:
score: 20
Accepted
time: 57ms
memory: 22596kb
input:
5000 5000 63141398 126604376 697512251 741353996 356604726 507953968 494219271 973110260 460861914 988416009 970876787 448429588 725493166 883501210 51076237 784293761 8003146 766721589 406465089 330785670 782582116 501008987 936941546 564663613 40330818 320342607 566652836 806983548 79234347 581976...
output:
148388816 822655068 341356275 153648250 610508782 658092334 115032444 61006948 232896592 132532556 281147472 170577711 453242756 564024529 950510296 417644928 35757971 824080049 490493323 96124139 158766038 597702738 69672015 841035419 405236159 258190228 66326403 227299828 359113584 34672879 117324...
result:
ok 5000 numbers
Test #2:
score: 0
Accepted
time: 62ms
memory: 22520kb
input:
5000 5000 208095035 189388209 910573484 151351163 857032742 409791136 427941504 561340305 440094307 848312088 743662365 160219901 584491656 208412392 473499824 79323110 469342548 790678258 903532373 940176368 916303640 12519872 294579622 875495570 887250524 595928577 642259826 222149097 873031301 42...
output:
597291565 466590571 543666430 955934901 739756468 993328702 393451173 956126185 739018480 946329402 990581650 589085210 656552878 941726143 200128337 610853683 191337824 450787673 494378602 960833257 772065473 317098668 597989053 965678661 839020241 790226238 400110943 786188793 733806002 190637300 ...
result:
ok 5000 numbers
Test #3:
score: 0
Accepted
time: 49ms
memory: 20636kb
input:
5000 5000 758829686 846421586 795445842 923423765 650851801 380291052 781540894 445139283 780903169 45635176 303532742 70594608 850028582 748168745 597843692 246704898 350529309 7279358 973729172 269517593 22112036 125333845 309121459 968441730 686776540 975145839 926379079 346059534 292798462 19216...
output:
463197740 26979945 961115125 585910970 224451566 822036760 183497285 813892643 8997869 291414695 131978485 899584925 779621202 716522212 879375421 91045492 330290371 691691224 52633475 340848115 186272999 890054530 911975959 514382765 763838056 167285656 930279525 785049503 150045446 570741767 97509...
result:
ok 5000 numbers
Test #4:
score: 0
Accepted
time: 44ms
memory: 22672kb
input:
5000 5000 831640431 885460668 883290311 161278701 616481017 280845019 388780100 404687561 721779426 228266599 363600658 948454460 388371957 246028605 655768029 731008092 605246260 564445876 760408308 26166250 71491179 320543409 377278440 522729682 703367018 322884625 692206745 411811213 557175990 77...
output:
973564643 126270676 513879186 160315552 474692304 502474019 656022067 882003880 105940288 652267128 369294132 107152190 559575798 752075334 355587403 735085822 578199820 483981812 74890692 358519217 379879058 32070627 446003765 10882971 382837033 282137994 909326140 46106521 358500230 735281951 3598...
result:
ok 5000 numbers
Test #5:
score: 0
Accepted
time: 25ms
memory: 22648kb
input:
5000 5000 386586821 473104785 923115322 80627280 723972117 76500891 901470530 40141226 605413269 508843738 568157568 511437103 387870706 707269439 370782055 605387529 647770332 427178306 213279296 635360385 647527011 43127485 265465400 93955214 147422318 973617973 166812244 700732812 611016742 80446...
output:
789940086 697637206 408002193 990320561 762711381 901590837 762961896 271872873 291306692 551854139 437673271 270540330 691269003 978607745 525751254 343060584 72443046 300879617 278943004 760067231 235472075 976841481 936605508 479647311 686662820 58080719 886417986 681348294 512210247 340704136 86...
result:
ok 5000 numbers
Test #6:
score: 0
Accepted
time: 25ms
memory: 22584kb
input:
5000 5000 792216357 552236642 821494867 527714453 169575822 820595714 51053252 285231608 834824001 795954150 856055581 789265115 391543052 623878414 831103431 973063635 851485478 722429924 377946447 74393554 229570805 77829523 104941568 904281532 519848089 214665346 829017846 170077097 530089743 975...
output:
231592521 710420358 76758915 241413386 430224292 922200556 894399093 539685138 594923071 860157611 94869286 900661909 4590133 587348986 920780522 790820661 536438280 976402941 439797034 327200752 920824344 894723053 962589436 412895743 843160266 488926976 317592562 384947824 445153417 711558885 8449...
result:
ok 5000 numbers
Subtask #2:
score: 20
Accepted
Dependency #1:
100%
Accepted
Test #7:
score: 20
Accepted
time: 1125ms
memory: 42180kb
input:
50000 50000 768966868 59696813 88144593 167570175 440425517 667021648 50234623 250465092 611066949 942141813 37909983 544761802 310089692 393644730 822735225 212716527 45802184 416983999 978914560 514007472 271601592 803603476 153018866 463206234 430926936 205142491 621149405 347663094 909171725 990...
output:
535964317 498669705 110235462 577178694 458409211 180052579 833120408 528030659 854656432 578186212 647551642 106109933 785867614 715665434 119860891 227206432 978129416 355043244 824024937 889456087 653872988 218204727 768257490 147883304 92932220 842681002 700378724 973977972 293932154 820122893 4...
result:
ok 50000 numbers
Test #8:
score: 0
Accepted
time: 290ms
memory: 40060kb
input:
50000 50000 926434242 833464466 818417327 197100897 15934287 644632732 232006706 557905827 95530335 953397962 584509490 134039675 456180816 88153497 341272750 905812813 623878180 753926638 345776279 455413981 491623547 971836681 670535283 525534014 876800156 818154122 115494771 967365768 513073832 9...
output:
50189578 614003924 406679462 891916825 854664555 383564578 656197644 2618026 701413889 802641599 87893214 112489935 882216004 256603507 510017739 429242037 619481996 800403686 180804571 620515587 694607788 124659042 803354134 599430985 133489716 153343561 718376448 482871834 148308285 176675015 3185...
result:
ok 50000 numbers
Test #9:
score: 0
Accepted
time: 739ms
memory: 42340kb
input:
50000 50000 771988922 212436623 804443396 817827846 830699527 784422632 729884276 912003446 995885315 824721340 837642183 283068922 372817603 100299803 60891115 676351412 641016821 983300431 887927410 950464053 960650766 801946150 981593160 201935570 609178140 408519531 929272301 588279454 605903956...
output:
331430307 842168506 514428667 355689311 865723558 272088222 5106326 724323283 63969592 24689102 375126359 172043952 425829760 749877111 327857093 646470881 65951216 305793882 95712629 723748855 433154753 809570577 771906309 477420435 245967760 460647924 923047416 272709139 700228441 906998284 174826...
result:
ok 50000 numbers
Test #10:
score: 0
Accepted
time: 728ms
memory: 42292kb
input:
50000 50000 900366749 674207154 742580520 423717735 53773991 646025272 25689686 304532836 101502882 140887825 84382607 434523825 626129678 318135577 937888950 303284365 836439804 651694084 478701931 947065798 684677978 332843230 554104599 912552910 417149550 163252218 881219604 924426344 842413390 6...
output:
866369968 233793457 165937004 573866572 499141399 50069437 126848823 357332948 487646929 199006759 335058982 690767657 892697514 805303044 886885871 694863196 5801194 954769260 109473624 573415210 828217282 59732343 505053373 352386067 840363722 636894175 425645259 208103655 473793746 127002236 7193...
result:
ok 50000 numbers
Test #11:
score: 0
Accepted
time: 597ms
memory: 40820kb
input:
50000 50000 128009702 835394168 195582915 237058448 308987847 332547707 3181530 522885776 607169352 843503488 560544297 234676319 754038773 971946242 251601569 713013731 449922156 964200243 270751518 485953250 983022206 416540821 96233750 773462469 218771460 869573801 1826928 217439825 101327578 643...
output:
809413913 900087043 897489309 490488662 860111942 389091241 845061538 685662609 477979480 990731474 975276464 524647592 959334221 279016791 579113462 806057027 834352370 414957639 135587999 772681462 736164077 81034876 768035946 828362323 685292149 417723235 77932963 281011135 28218190 682861276 258...
result:
ok 50000 numbers
Test #12:
score: 0
Accepted
time: 528ms
memory: 40620kb
input:
50000 50000 599691755 74459068 334593294 689318718 842905094 443210545 96280108 643838657 591570435 747119928 963798260 884441507 753584023 622768897 446596420 332458502 185519101 709830529 141249071 885916331 314791389 276299436 336855194 552443961 696874117 738278010 593700707 229502424 335910014 ...
output:
162968440 829114 814500713 268429015 476122947 818974632 467331763 12940232 70162519 26148936 753219232 517231641 428317039 509625675 870990487 600796230 385649006 922400831 368412364 536483891 715148335 810869176 206671100 908712544 377398265 119727728 226288513 266653103 263036296 547334935 552450...
result:
ok 50000 numbers
Test #13:
score: 0
Accepted
time: 299ms
memory: 40604kb
input:
50000 50000 509049147 846306934 497301582 156085268 418734386 738839401 463112303 670194644 148295378 897052920 337867193 22462071 304900070 737711091 665480978 823159855 481862593 827100577 316492474 693956517 618429668 870188133 65980921 940212747 403208852 268141196 171329777 255058173 740325554 ...
output:
395519880 988998325 123071413 493713767 662307084 960909185 899731232 660410246 707341210 28490302 887326532 11593659 417615875 848911573 573179668 137809591 475174820 133873443 756015822 372043435 654859285 863530053 521918428 957117123 712163801 591167143 206607972 85953124 12946789 66960555 99205...
result:
ok 50000 numbers
Test #14:
score: 0
Accepted
time: 296ms
memory: 42460kb
input:
50000 50000 271460757 98184763 207476207 318550358 36132989 163998764 834240576 816456648 104049969 565152081 639115703 63526614 540131202 584035121 125994524 103597578 198061629 69949079 246096816 249710935 309174260 770090066 306030177 506695475 716974345 478421640 989138506 146754109 896531147 87...
output:
227639846 402726965 215887242 144596012 768374615 60584104 132321406 817024981 963910026 42360689 737913188 348299774 276641697 65869541 636135686 129087361 794550831 458540944 2270242 99210275 74519859 983209150 670092005 849382923 682067660 418183252 61685226 144713076 943183123 543020736 32933718...
result:
ok 50000 numbers
Subtask #3:
score: 20
Accepted
Test #15:
score: 20
Accepted
time: 1835ms
memory: 515872kb
input:
250000 250000 768540930 17767906 372927484 987601476 466807233 279110163 484031897 581293130 869165405 440806324 190995959 228277657 510008046 885148108 825022142 732048181 608976903 327270073 923084855 752263987 475969665 911033413 561860569 377841111 401028041 117941740 350378391 295513473 2304741...
output:
645687892 804644292 204845058 833159303 438840602 426417420 912375389 325277630 897894204 651802587 232723981 612719545 449284803 97772899 900152796 609960724 641400352 204127911 176781081 752207129 720790544 624982826 923898464 696425075 641906962 568669044 49974863 45637134 16934743 814263646 3524...
result:
ok 250000 numbers
Test #16:
score: 0
Accepted
time: 1792ms
memory: 515836kb
input:
250000 250000 891116300 898356877 251723070 604671849 697052662 536848016 939693407 986573382 593450706 855565471 640899587 67478597 127577868 205200967 935001574 667983193 695063369 974771972 958840013 509047663 933018751 809878590 601610117 337290677 687704465 365112336 704196535 158405904 7278515...
output:
119336010 921443294 779683070 950551877 180248958 344824198 755825894 552477508 969820065 401891602 680193691 326353587 922152363 128919523 206197552 621042892 992122592 674625075 560913507 365647753 93734067 528767756 49194731 580013693 408137293 293884394 395805325 171434454 83012338 512032587 864...
result:
ok 250000 numbers
Test #17:
score: 0
Accepted
time: 1818ms
memory: 515980kb
input:
250000 250000 988998207 760388680 80877172 892847778 807199431 393547350 436490526 580450227 796105943 37118112 564378459 973015163 696339619 330864317 339107150 393054808 269903945 542034556 593508399 142447284 506346702 54826941 491062909 411280253 562632098 740794370 841286188 751650890 408061646...
output:
533479270 244359425 776984548 501658625 503647730 421165217 475383706 493748710 803957134 308028631 338652576 225743050 719589438 797270766 308210397 681648078 715232260 755309870 297023667 540327743 655176795 199967718 768390190 381825918 261506225 816338258 650716640 807889190 837604717 903940898 ...
result:
ok 250000 numbers
Test #18:
score: 0
Accepted
time: 1835ms
memory: 516052kb
input:
250000 250000 82054290 888723988 925549675 334581140 696787014 591297195 24015805 250825352 455399696 29763540 339278830 610597821 29807173 237262484 567614041 186608691 582297589 858558005 946613881 84740258 747546189 286666089 526643626 856259798 96238988 789860420 678959410 683142401 842582154 43...
output:
185366931 801951859 356265156 462055598 126863911 949108884 412193442 213529342 464936198 390513058 492908470 412470588 49794849 694745450 799113332 757373572 111634187 780139796 206811208 297593116 215666373 588229368 129921558 277637592 192167089 750104385 43787346 966654517 181439099 622785017 21...
result:
ok 250000 numbers
Test #19:
score: 0
Accepted
time: 1870ms
memory: 515940kb
input:
250000 250000 303112864 577259977 305520229 955904347 408230826 263382697 14414636 918886374 372550214 528678589 225017216 378695342 29985355 399933915 507292974 962381308 958737761 702243621 838729080 353665889 928018619 162044348 121018117 947282353 481418612 587591271 898269843 805889605 35816203...
output:
585867031 201035063 490999542 736033151 895744149 914585406 837995141 208389376 776508499 640779260 838103956 230216004 710637540 829432702 693525890 745770938 516105287 569949793 581870756 84779525 105610416 745875258 701536062 383879261 237965240 488513885 471198096 114317593 689839166 867352849 5...
result:
ok 250000 numbers
Subtask #4:
score: 0
Time Limit Exceeded
Dependency #1:
100%
Accepted
Dependency #2:
100%
Accepted
Dependency #3:
100%
Accepted
Test #20:
score: 0
Time Limit Exceeded
input:
250000 250000 1684 27592 26500 13048 4760 29684 15515 5159 20974 134 23909 27520 30454 1904 227 2452 28497 25053 30049 13839 3142 25354 11256 7474 2660 20823 7510 12676 15465 30110 27586 21956 23907 13507 26202 25377 19989 26508 20895 24494 16796 25779 6452 30992 7507 28986 20195 6009 4083 2815 6881...
output:
96805739 420659502 903298513 653391797 31584693 21333603 648135326 691422708 651502421 477431034 238029494 737658150 533593084 416924184 881552318 771216145 581451529 563971625 764611945 801800267 213752161 642275568 178651185 141795059 307732170 341959588 546615494 592854489 306671319 286287897 850...