QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#883233 | #9638. 线段树与区间加 | xxzx | 0 | 0ms | 0kb | C++17 | 6.1kb | 2025-02-05 15:23:49 | 2025-02-05 15:23:52 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define clo 1000.*clock()/CLOCKS_PER_SEC
#ifndef xxzx
#define endl '\n'
#endif
using ll=long long;
using PII=pair<int,int>;
const int N=2e5+10;
bool memory1;
template<typename T=int> T read() {
T f=1,x=0; char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') f=-1; ch=getchar(); }
while(ch>='0'&&ch<='9') { x=x*10+ch-'0', ch=getchar(); }
return f*x;
}
int n,m,l[N],r[N],ls[N],rs[N],id[N],idfn[N];
unsigned va[N],vb[N],len[N];
struct SegmentTree {
unsigned res[N<<2],lz[N<<2],f[N<<2],cl[N<<2];
#define ls (id<<1)
#define rs (id<<1|1)
// res = v*f
void Build(int id,int l,int r) {
if(l==r) return f[id]=vb[idfn[l]],void();
int mid=(l+r)>>1;
Build(ls,l,mid),Build(rs,mid+1,r);
f[id]=f[ls]+f[rs];
}
void pushdown(int id) {
if(cl[id]) {
cl[id]=0;
res[ls]=lz[ls]=0,cl[ls]=1;
res[rs]=lz[rs]=0,cl[rs]=1;
}
if(lz[id]) {
unsigned val=lz[id]; lz[id]=0;
res[ls]+=f[ls]*val,lz[ls]+=val;
res[rs]+=f[rs]*val,lz[rs]+=val;
}
}
void Modify(int id,int l,int r,int x,int y,unsigned val) {
if(x>y) return;
if(x<=l&&y>=r) {
// cerr<<"Modi "<<id<<" "<<l<<" "<<r<<" "<<x<<" "<<y<<" "<<f[id]*val<<" "<<f[id]<<endl;
res[id]+=f[id]*val,lz[id]+=val;
return;
}
pushdown(id);
int mid=(l+r)>>1;
if(x<=mid) Modify(ls,l,mid,x,y,val);
if(y>mid) Modify(rs,mid+1,r,x,y,val);
res[id]=res[ls]+res[rs];
}
void Clear(int id,int l,int r,int x,int y) {
if(x>y) return;
if(x<=l&&y>=r) {
res[id]=lz[id]=0,cl[id]=1;
return;
}
pushdown(id);
int mid=(l+r)>>1;
if(x<=mid) Clear(ls,l,mid,x,y);
if(y>mid) Clear(rs,mid+1,r,x,y);
res[id]=res[ls]+res[rs];
}
#undef ls
#undef rs
}sgt;
int sz[N],son[N],fa[N][20],dep[N];
void dfs1(int x,unsigned sum) {
// cerr<<"Dfs1"<<endl;
sum+=va[x];
vb[x]+=sum*len[x],sz[x]=1;
if(!ls[x]) return;
for(auto y:{ls[x],rs[x]}) {
fa[y][0]=x,dep[y]=dep[x]+1;
dfs1(y,sum);
sz[x]+=y;
}
son[x]=(sz[ls[x]]>=sz[rs[x]])? ls[x]:rs[x];
}
void dfs11(int x) {
if(!ls[x]) return;
for(auto y:{ls[x],rs[x]}) {
vb[x]-=vb[y];
dfs11(y);
}
}
int jump(int x,int h) {
for(int i=0;h;h>>=1,i++) if(h&1) x=fa[x][i];
return x;
}
int lca(int x,int y) {
if(dep[x]<dep[y]) swap(x,y);
x=jump(x,dep[x]-dep[y]);
if(x==y) return x;
for(int i=19;i>=0;i--)
if(fa[x][i]!=fa[y][i]) x=fa[x][i],y=fa[y][i];
return fa[x][0];
}
int L[3][N],R[3][N],tim,top[N],vis[N];
void dfs2(int x) {
// cerr<<"Dfs2 "<<endl;
vector<int> nd;
int p=x; vis[p]=1,nd.push_back(p);
while(son[p]) p=son[p],vis[p]=1,nd.push_back(p);
for(auto i:nd) L[0][i]=++tim,top[i]=x,idfn[tim]=i;
for(auto i:nd) R[0][i]=tim;
for(auto i:nd) {
L[1][i]=tim+1;
if(ls[i]&&!vis[ls[i]]) dfs2(ls[i]);
R[1][i]=tim;
}
for(auto i:nd) {
L[2][i]=tim+1;
if(rs[i]&&!vis[rs[i]]) dfs2(rs[i]);
R[2][i]=tim;
}
}
int rt;
void clear(int x) { // x 到根全体清空
while(x) {
sgt.Clear(1,1,2*n-1,L[0][top[x]],L[0][x]);
x=fa[top[x]][0];
}
}
void addsub(int p,unsigned v) {
// cerr<<L[0][p]<<" "<<R[0][p]<<endl;
// cerr<<L[1][p]<<" "<<R[1][idfn[R[0][p]]]<<endl;
// cerr<<L[2][p]<<" "<<R[2][idfn[R[0][p]]]<<endl;
// cerr<<L[2][2]<<" "<<R[2][6]<<" "<<idfn[R[0][2]]<<endl;
sgt.Modify(1,1,2*n-1,L[0][p],R[0][p],v);
sgt.Modify(1,1,2*n-1,L[1][p],R[1][idfn[R[0][p]]],v);
sgt.Modify(1,1,2*n-1,L[2][p],R[2][idfn[R[0][p]]],v);
}
void add(int x,int y,int op,unsigned v) { // x 到 y 左/右 子树加
// cerr<<"Add "<<x<<" "<<y<<" "<<op<<" "<<v<<endl;
while(top[x]!=top[y]) {
// cerr<<x<<" "<<top[x]<<" "<<L[op][top[x]]<<" "<<R[op][x]<<endl;
sgt.Modify(1,1,2*n-1,L[op][top[x]],R[op][x],v);
if(son[x]&&((op==1)? ls[x]:rs[x])==son[x]) addsub(son[x],v);
x=fa[top[x]][0];
}
// cerr<<x<<" "<<y<<" "<<L[op][y]<<" "<<R[op][x]<<endl;
sgt.Modify(1,1,2*n-1,L[op][y],R[op][x],v);
if(son[x]&&((op==1)? ls[x]:rs[x])==son[x]) addsub(son[x],v);
}
bool memory2;
int main() {
n=read(),m=read();
set<pair<PII,int>> seg;
for(int i=1;i<=2*n-1;i++) {
l[i]=read(),r[i]=read(),va[i]=read<unsigned>(),vb[i]=read<unsigned>();
seg.insert({{l[i],r[i]},i});
len[i]=r[i]-l[i]+1;
if(l[i]!=r[i]) ls[i]=read(),rs[i]=read();
if(l[i]==1&&r[i]==n) rt=i;
}
dfs1(rt,0);
dfs11(rt);
dfs2(rt);
for(int j=1;j<20;j++) for(int i=1;i<=n;i++) fa[i][j]=fa[fa[i][j-1]][j-1];
for(int i=1;i<=2*n-1;i++) if(rs[i]) id[l[rs[i]]]=i;
id[1]=2*n,id[n+1]=2*n+1,dep[2*n]=dep[2*n+1]=-1;
// for(int i=1;i<=2*n-1;i++) cerr<<idfn[i]<<" ";
// cerr<<endl;
sgt.Build(1,1,2*n-1);
// unsigned val=(vb[2]+vb[4]+vb[5]+vb[6]+vb[7]);
// cerr<<val<<endl;
// sgt.Modify(1,1,2*n-1,3,6,3);
// cerr<<vb[4]<<" "<<vb[5]<<" "<<vb[6]<<" "<<vb[7]<<endl;
// add(2,2,2,1),add(3,3,1,1);
// cout<<sgt.res[1]<<endl;
// m=1;
// return 0;
for(int _=1,l,r,v;_<=m;_++) {
l=read(),r=read(),v=read();
auto it=seg.lower_bound({{l,r},0});
if(it!=seg.end()&&it->first==make_pair(l,r)) {
int p=it->second;
clear(fa[p][0]);
// cerr<<"P "<<p<<endl;
addsub(p,v);
}
else {
int x=id[l],y=id[r+1],z=((max(x,y)<=2*n-1)? lca(x,y):max(x,y));
if(x<=2*n-1) { clear(x),add(x,jump(x,dep[x]-dep[z]-1),2,v); }
if(y<=2*n-1) { clear(y),add(y,jump(y,dep[y]-dep[z]-1),1,v); }
}
cout<<sgt.res[1]<<endl;
}
#ifdef xxzx
cerr<<"Time: "<<clo<<"MS"<<endl;
cerr<<"Memory: "<<abs(&memory1-&memory2)/1024./1024.<<"MB"<<endl;
#endif
return 0;
}
详细
Pretests
Final Tests
Test #1:
score: 0
Runtime Error
input:
2000 2000 1793 1798 1262660447 3355636366 3629 1228 103 1852 1180930258 1265499397 1821 3806 680 680 2673755170 3193571303 737 740 3064103572 3343535318 1993 502 1720 1721 3117882744 1227116751 3561 1857 117 117 2249090646 234980450 1897 1901 87845907 4069299503 2523 1140 1832 1835 981230847 3022191...
output:
result:
Test #2:
score: 0
Runtime Error
input:
2000 2000 372 372 0 989361745 268 744 0 2134086804 3992 1151 929 932 0 3450655381 1108 1775 1527 1527 0 2098122263 261 264 0 767043297 3813 2562 1011 1013 0 1426875762 997 1431 160 160 0 2574808476 1660 1770 0 2181120880 1536 69 1650 1650 0 3634539115 811 811 0 4269292508 518 518 0 3874323908 248 25...
output:
result:
Test #3:
score: 0
Runtime Error
input:
2000 2000 1045 1046 0 2632377141 2540 3747 1673 1674 0 1669064774 1585 1359 1737 1737 0 4187517691 134 134 0 1381105987 1678 1678 0 3194199856 629 632 0 1039365507 1669 3337 1224 1225 0 2056342816 2564 1715 501 1491 0 2746594998 563 3172 1859 1860 0 1399867507 3486 1239 377 377 0 4114286174 266 266 ...
output:
result:
Test #4:
score: 0
Runtime Error
input:
2000 2000 1922 1923 4154142567 0 624 1116 1611 1625 1842722647 0 1405 1312 101 102 328256453 0 3110 2786 859 860 1546215739 0 489 2099 1154 1157 4134074442 0 341 792 531 532 1656285477 0 1961 1533 451 454 2149232978 0 3570 253 496 496 12489066 0 1697 1700 2769881303 0 2485 3845 1232 1232 4274380990 ...
output:
result:
Test #5:
score: 0
Runtime Error
input:
2000 2000 1516 1516 786840671 0 546 547 533550872 0 3506 319 947 952 3586638444 0 1398 2922 1769 1777 1598495528 0 2351 3492 1487 1488 3433976236 0 2998 372 266 268 4081199540 0 3034 1376 9 11 16162852 0 2016 2453 606 606 868772445 0 500 501 1406522390 0 1201 3967 1448 1449 2080781326 0 1547 1988 22...
output:
result:
Test #6:
score: 0
Runtime Error
input:
40000 40000 19061 19064 2717945240 3834098532 59850 71996 14933 14933 877340266 1841904212 34098 34170 3550522541 2738188651 75607 2753 4691 4691 530532762 675854163 9890 9890 2833834223 2233457146 14140 14140 1300081732 193421532 1623 1623 1598527863 3121134528 4929 4929 1218079042 439770536 324 39...
output:
result:
Test #7:
score: 0
Runtime Error
input:
40000 40000 37504 37504 0 2993769426 14320 14322 0 3704545631 44050 52152 2757 37130 0 1236105917 2455 3677 884 884 0 4026492894 10076 10077 0 609448457 7650 75701 16404 16404 0 245461674 22018 22018 0 2771692605 1501 1501 0 2419888954 16860 16861 0 1871411848 33204 21442 15067 15068 0 1175031405 20...
output:
result:
Test #8:
score: 0
Runtime Error
input:
40000 40000 20206 20206 0 4103926985 25572 25573 0 1124285259 79417 25683 23524 23524 0 2945938453 26314 26316 0 3769707656 62994 20223 1933 1933 0 3202000408 12690 27072 0 663839624 50239 60259 27007 27013 0 1608124753 48394 32123 1283 1284 0 4010999538 17252 36084 11373 11375 0 3200987115 25973 22...
output:
result:
Test #9:
score: 0
Runtime Error
input:
40000 40000 28600 31103 398400104 0 50206 67695 18214 18214 987691543 0 21117 21117 2501164446 0 35971 35972 884844107 0 49942 386 17501 17501 4216208706 0 12649 12649 3198897355 0 1690 1695 1689582721 0 30803 36361 33084 33084 2651714130 0 26656 26660 3389387136 0 27495 17328 32764 32764 2921506964...
output:
result:
Test #10:
score: 0
Runtime Error
input:
40000 40000 24203 24203 1353036479 0 30073 30082 1740596718 0 53750 62241 11650 11652 3664808690 0 7271 53525 17686 17686 2170088447 0 14215 14215 877899577 0 10389 14544 1220290260 0 2779 34931 17557 17561 3312844542 0 9486 56774 37025 37026 360931058 0 52630 1863 8544 8545 2355582057 0 34372 13606...
output:
result:
Test #11:
score: 0
Runtime Error
input:
200000 200000 32600 32601 279707947 3333652085 81223 369345 107195 110357 2797643167 3204100200 211635 180774 50076 50076 3586231592 2031356328 9086 9086 2226760698 457985624 89785 143170 2137446218 370802330 339432 56185 15190 19580 3336566407 2687475581 239505 274514 199717 199717 1343907462 27476...
output:
result:
Test #12:
score: 0
Runtime Error
input:
200000 200000 103447 103448 0 2671179003 304649 129499 145911 145911 0 1121422691 157741 157744 0 1929193038 145603 72009 11904 11905 0 2289998670 146636 237088 122867 122868 0 186090819 413 270761 193873 193873 0 203093844 20838 20838 0 2999266101 92497 92498 0 2375994881 321423 197661 10185 10185 ...
output:
result:
Test #13:
score: 0
Memory Limit Exceeded
input:
200000 200000 190183 190188 0 1706040846 362170 41622 150705 150705 0 2188179441 148325 148330 0 2355075143 61581 324431 190406 190407 0 1131747042 383315 217073 23144 23152 0 1897327529 396050 285637 93051 93051 0 1804212175 186538 186541 0 3315936642 306793 151829 45692 45692 0 1239029798 30972 30...
output:
result:
Test #14:
score: 0
Runtime Error
input:
200000 200000 90506 102530 236918570 0 337847 201999 50479 50482 1884914043 0 242965 18370 197965 197965 1150415084 0 181841 181841 524351831 0 43868 43886 3739237894 0 365544 340081 104279 104279 1518148351 0 34148 34154 3970381744 0 379789 218872 73698 73698 3847658012 0 71224 71225 2029945887 0 3...
output:
result:
Test #15:
score: 0
Runtime Error
input:
200000 200000 184636 184636 470383782 0 69147 163622 581509052 0 286341 357499 95155 95155 577954429 0 126294 126294 3693354981 0 184618 187568 3886149811 0 333358 166507 188512 188512 303047117 0 20400 20400 3407789462 0 44704 44705 1224895264 0 162096 75280 133755 133757 109227272 0 132577 372294 ...
output:
result:
Test #16:
score: 0
Memory Limit Exceeded
input:
200000 200000 30492 35854 729190907 1956530869 220290 207964 178288 178288 793919639 4043397768 4965 4965 2255872372 819681301 64878 99465 669086428 517288923 75560 27338 13595 16760 415742798 3804064469 203533 253759 154291 154293 601666143 200879632 289484 190128 121100 121101 2476950350 105407364...
output:
result:
Test #17:
score: 0
Runtime Error
input:
200000 200000 158994 158994 0 2397655320 165026 165026 0 1247467790 193088 193089 0 1131792894 25325 134960 34834 34834 0 1974874050 106908 106908 0 158855686 73570 73571 0 660499851 32725 33730 126276 126276 0 2799927501 183868 183870 0 2792433045 319704 248051 145831 145832 0 796369972 384435 1211...
output:
result:
Test #18:
score: 0
Runtime Error
input:
200000 200000 42026 42026 0 103840682 115527 115527 0 730801603 175286 175286 0 952465904 115721 115722 0 3887082779 210578 202527 14017 17027 0 2717984672 155430 298216 113340 113340 0 1196664755 143222 143224 0 1622284707 237907 258953 115973 115975 0 2441078898 207848 192004 54478 54478 0 3169258...
output:
result:
Test #19:
score: 0
Runtime Error
input:
200000 200000 92524 92524 182603024 0 116778 116778 2576939405 0 10207 10207 1898802503 0 178036 178038 1935186518 0 44870 317892 137541 137544 2674676024 0 210860 64999 68085 68085 1958593201 0 179926 179929 2584382023 0 185913 349215 45422 45423 2495993608 0 157833 264143 109854 121340 113104103 0...
output:
result:
Test #20:
score: 0
Memory Limit Exceeded
input:
200000 200000 12387 12389 2109068107 0 384829 227596 26592 26594 2550267931 0 57077 72658 80444 80444 1329109323 0 119995 119995 4165698375 0 48876 48876 766047886 0 155836 155836 3512049107 0 50100 50100 1831955483 0 193088 193089 3589455426 0 34273 140648 126549 126549 1726763169 0 149430 154350 1...
output:
result:
Test #21:
score: 0
Runtime Error
input:
200000 200000 165129 165131 3633865218 98447901 160942 69260 170590 170592 2878276602 4164208122 147121 65383 199006 199017 3624152661 4138881358 49640 64235 92616 137590 1278705205 1262535969 229078 92015 12733 12733 1753647128 400573041 138294 138294 503689729 1701121075 178554 185671 951413620 10...
output:
result:
Test #22:
score: 0
Runtime Error
input:
200000 200000 42616 42616 0 4073548647 148817 148819 0 678516345 137141 295278 136568 136568 0 1311526245 162591 162591 0 1123778942 152429 152430 0 865424725 274628 226053 123226 123226 0 1843160929 3315 3315 0 2548140955 158521 158522 0 726899994 308692 139695 128630 128630 0 3560425273 137094 137...
output:
result:
Test #23:
score: 0
Memory Limit Exceeded
input:
200000 200000 92930 92933 0 945338790 270177 344831 44586 44586 0 2120126372 80169 80169 0 3407810035 173606 173606 0 2056188474 144888 144888 0 1376882346 9586 9586 0 2496173660 67542 67542 0 3278572994 95705 95705 0 2103944675 73814 73815 0 4244900263 66623 87248 149429 149431 0 2014898776 8786 61...
output:
result:
Test #24:
score: 0
Runtime Error
input:
200000 200000 182457 182458 3070241886 0 235330 232917 130450 160512 2343593919 0 288610 262204 86835 86836 2084902783 0 271317 299422 39111 91715 827843559 0 14965 357810 131676 131677 2889067161 0 266237 6055 88274 88274 4216568292 0 119859 119861 3636500316 0 297047 394521 30700 112091 528067902 ...
output:
result:
Test #25:
score: 0
Runtime Error
input:
200000 200000 16728 16728 2942007300 0 176509 176509 1919353043 0 102679 102679 3974389408 0 182519 182519 1184106257 0 83079 83089 1520374942 0 181757 4901 35926 35926 2259226600 0 33932 33933 3693656209 0 101981 2261 1804 1805 4038337356 0 92067 46297 15141 15143 4117148560 0 172165 356831 59008 5...