QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#48749 | #2066. Data Structure Quiz | feecle6418 | AC ✓ | 2448ms | 85712kb | C++14 | 3.7kb | 2022-09-15 16:15:59 | 2022-09-15 16:16:01 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct P{
ll mx,maxmx;
}t[400005];
struct Oper{
int l,r,x;
};
vector<Oper> a[50005];
int n,m,q;
int ok=0;
ll add[400005],mxadd[400005],tag[400005];
P operator +(P a,P b) {
return {max(a.mx,b.mx),max(a.maxmx,b.maxmx)};
}
void Add(int p,ll ad,ll mxad){
mxadd[p]=max(mxadd[p],mxad+add[p]),add[p]+=ad;
t[p].maxmx=max(t[p].maxmx,t[p].mx+mxad),t[p].mx+=ad;
}
void Tag(int p){
tag[p]=1,mxadd[p]=add[p],t[p].maxmx=t[p].mx;
Add(p*2,add[p],mxadd[p]),Add(p*2+1,add[p],mxadd[p]),add[p]=mxadd[p]=0;
t[p].maxmx=t[p].mx;
}
void Pushdown(int p) {
if(tag[p])Tag(p*2),Tag(p*2+1),tag[p]=0;
if(add[p]||mxadd[p])Add(p*2,add[p],mxadd[p]),Add(p*2+1,add[p],mxadd[p]),add[p]=mxadd[p]=0;
}
void Addd(int p,int l,int r,int x,int y,ll z) {
if(x<=l&&r<=y){
Add(p,z,z);
//if(ok)printf("p=%d l=%d r=%d add[p]=%lld mxadd[p]=%lld maxmx=%lld mx=%lld\n",p,l,r,add[p],mxadd[p],t[p].maxmx,t[p].mx);
return void();
}
Pushdown(p);
int mid=(l+r)/2;
if(x<=mid)Addd(p*2,l,mid,x,y,z);
if(mid<y)Addd(p*2+1,mid+1,r,x,y,z);
t[p]=t[p*2]+t[p*2+1];
//if(ok)printf("p=%d l=%d r=%d add[p]=%lld mxadd[p]=%lld maxmx=%lld mx=%lld\n",p,l,r,add[p],mxadd[p],t[p].maxmx,t[p].mx);
}
P Query(int p,int l,int r,int x,int y) {
//if(ok)printf("p=%d l=%d r=%d add[p]=%lld mxadd[p]=%lld maxmx=%lld mx=%lld\n",p,l,r,add[p],mxadd[p],t[p].maxmx,t[p].mx);
if(x<=l&&r<=y)return t[p];
Pushdown(p);
int mid=(l+r)/2;
if(x>mid)return Query(p*2+1,mid+1,r,x,y);
if(y<=mid)return Query(p*2,l,mid,x,y);
return Query(p*2,l,mid,x,y)+Query(p*2+1,mid+1,r,x,y);
}
struct Q{
int x1,y1,x2,y2,id;
};
int CUR;
ll ans[500005];
vector<Q> vl[50005],vr[50005];
void Print(int p,int l,int r){
printf("p=%d tag[p]=%d t[p]=(%lld,%lld) addtag=%lld mxadd=%lld\n",p,tag[p],t[p].mx,t[p].maxmx,add[p],mxadd[p]);
if(l==r)return ;
int mid=(l+r)/2;
Print(p*2,l,mid);
Print(p*2+1,mid+1,r);
}
void Solve(int l,int r,vector<Q> q){
if(l>r||!q.size())return ;
// cout<<l<<' '<<r<<'\n';
int mid=(l+r)/2;
while(CUR>mid){
for(auto i:a[CUR])Addd(1,1,n,i.l,i.r,-i.x);
CUR--;
}
while(CUR<mid){
CUR++;
for(auto i:a[CUR])Addd(1,1,n,i.l,i.r,i.x);
}
vector<Q> q1,q2;
for(auto i:q){
if(i.x2<mid)q1.push_back(i);
else if(i.x1>mid)q2.push_back(i);
else {
vl[i.x1].push_back(i);
vr[i.x2].push_back(i);
}
}
Tag(1);
//printf("CUR=%d\n",CUR);
//Print(1,1,n);
ok=1;
//cout<<mid<<' '<<t[1].maxmx<<'\n';
for(int i=mid;i>=l;i--){
//printf("current i=%d\n",i);
for(auto j:vl[i])ans[j.id]=max(ans[j.id],Query(1,1,n,j.y1,j.y2).maxmx);
if(i>l){
for(auto j:a[i])if(j.x>0)Addd(1,1,n,j.l,j.r,-j.x);//,Print(1,1,n);
for(auto j:a[i])if(j.x<=0)Addd(1,1,n,j.l,j.r,-j.x);//,Print(1,1,n);
}
}
//cout<<ans[1]<<'\n';
ok=0;
CUR=l;
while(CUR<mid){
CUR++;
for(auto i:a[CUR])Addd(1,1,n,i.l,i.r,i.x);
}
Tag(1);
for(int i=mid;i<=r;i++){
for(auto j:vr[i])ans[j.id]=max(ans[j.id],Query(1,1,n,j.y1,j.y2).maxmx);
if(i<r){
for(auto j:a[i+1])if(j.x<=0)Addd(1,1,n,j.l,j.r,j.x);
for(auto j:a[i+1])if(j.x>0)Addd(1,1,n,j.l,j.r,j.x);
}
}
CUR=r;
for(int i=l;i<=r;i++)vl[i].clear(),vr[i].clear();
Solve(mid+1,r,q2),Solve(l,mid-1,q1);
}
int main(){
//freopen("matrix.in","r",stdin);
//freopen("matrix.out","w",stdout);
scanf("%d%d%d",&n,&m,&q);
for(int i=1,x1,y1,x2,y2,w;i<=m;i++){
scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&w);
a[x1].push_back({y1,y2,w});
a[x2+1].push_back({y1,y2,-w});
}
vector<Q> tq;
for(int i=1,x1,y1,x2,y2;i<=q;i++){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
tq.push_back({x1,y1,x2,y2,i});
}
CUR=1;
for(auto i:a[1])Addd(1,1,n,i.l,i.r,i.x);
Solve(1,n,tq);
for(int i=1;i<=q;i++)cout<<ans[i]<<'\n';
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 2ms
memory: 17848kb
input:
5 5 5 1 1 4 5 4 4 1 4 1 10 1 3 3 3 3 1 1 5 5 8 2 4 4 5 8 2 1 2 1 4 1 5 4 1 2 3 5 2 1 5 3 1 3 5 5
output:
12 22 20 22 20
result:
ok 5 lines
Test #2:
score: 0
Accepted
time: 1995ms
memory: 78732kb
input:
50000 50000 500000 16871 5910 38645 11584 102302533 31823 22147 32606 32325 54323252 6264 33722 16831 41670 490722731 14402 13424 44438 47540 518767188 41742 4464 49082 42932 207958498 8082 11986 22079 24809 363258707 19448 35549 28664 48861 978363188 1227 11606 7531 23638 170429582 24192 19262 4841...
output:
6388780705217 3256231743561 2700563425767 3543982704826 6388780705217 6132320153752 6388780705217 4816120679458 4531079315748 6388780705217 6364533581781 6388780705217 6080729936096 6131381460318 6319420244493 4899110043524 6303852912414 6372474571504 6020759826628 5844748884463 3736533382114 638878...
result:
ok 500000 lines
Test #3:
score: 0
Accepted
time: 2067ms
memory: 79288kb
input:
50000 50000 500000 22069 8358 47425 22050 81651787 15811 11426 35575 16481 41660138 16704 1414 49625 10155 152884542 12319 746 16189 19750 958031429 19726 16518 49252 46143 230272355 18291 36326 29644 43595 550525873 20955 28981 38675 34939 94198000 4902 31548 45827 41071 117995501 7302 3717 31781 1...
output:
5658039515636 6158908699079 5848215122796 6219496495548 6265002184172 6265002184172 2681669712599 4746971547364 6265002184172 3350895881774 6260197970482 6241886519042 915657351900 6265002184172 5630722480405 5277824602040 6265002184172 5307640203720 2626310750568 2671340673707 6265002184172 5851825...
result:
ok 500000 lines
Test #4:
score: 0
Accepted
time: 2107ms
memory: 78012kb
input:
50000 50000 500000 5493 3599 34875 20539 915776848 14352 33340 49799 40305 323964320 9847 11157 49716 29692 374854865 13747 473 34429 48469 957104182 32569 20526 33475 47000 252586212 28697 30547 37011 33715 442825744 6350 5118 49389 45210 210032813 34976 18786 48939 43097 505752907 5787 3579 30585 ...
output:
4378955362187 6296243754654 6305752684115 3623041706838 5105636958041 3128663434453 5234069178430 1590212020060 4475499995748 2468998316858 6305752684115 4119470819819 4996302865088 4218591646657 5821114676760 5018403436668 5526024394548 4775567619304 6302907520925 6212462483740 6305752684115 613520...
result:
ok 500000 lines
Test #5:
score: 0
Accepted
time: 2101ms
memory: 78384kb
input:
50000 50000 500000 21621 19739 48132 24209 895126102 10425 12289 33787 17496 901235799 20287 6126 49806 38197 742049381 15050 46191 18201 48491 396368422 40078 44778 47223 44910 979932773 3558 30731 29923 48961 335125614 1319 31288 48642 48550 620834922 6539 10531 10836 23319 598543018 4272 19314 20...
output:
5775411296647 4707963322908 4985522715883 6110349523125 6260672737220 6253384353832 1639016302030 6247016231039 6260672737220 5786945200725 6260672737220 6260672737220 1697603530511 6260672737220 6251015483539 5835276126056 6260672737220 6247016231039 3828417282271 4016480762947 5027731695290 626067...
result:
ok 500000 lines
Test #6:
score: 0
Accepted
time: 2448ms
memory: 85600kb
input:
50000 50000 500000 16871 5910 38645 11584 102302533 31823 22147 32606 32325 54323252 6264 33722 16831 41670 490722731 14402 13424 44438 47540 518767188 41742 4464 49082 42932 207958498 8082 11986 22079 24809 363258707 19448 35549 28664 48861 978363188 1227 11606 7531 23638 170429582 24192 19262 4841...
output:
6388780705217 2592920412653 6388780705217 5792422810550 3403524420132 4469346361285 955556952705 2052432481492 6351625228162 5853671724969 6388780705217 3898011841314 5902622112867 4512840540463 1777067083180 6388780705217 2889303324243 6167526874283 4511922863130 3803579762357 4422164161134 5650552...
result:
ok 500000 lines
Test #7:
score: 0
Accepted
time: 2318ms
memory: 82776kb
input:
50000 50000 500000 22069 8358 47425 22050 81651787 15811 11426 35575 16481 41660138 16704 1414 49625 10155 152884542 12319 746 16189 19750 958031429 19726 16518 49252 46143 230272355 18291 36326 29644 43595 550525873 20955 28981 38675 34939 94198000 4902 31548 45827 41071 117995501 7302 3717 31781 1...
output:
5972666918689 5848215122796 6224891654734 4747585277695 193741762440 3913451592500 748629754445 4780940004894 5455284821809 1283950611486 5195724495107 6265002184172 4600242676770 6265002184172 5186322122659 3492692905131 6265002184172 1220374640535 226763043426 188578806742 837863715764 61326559677...
result:
ok 500000 lines
Test #8:
score: 0
Accepted
time: 2309ms
memory: 85712kb
input:
50000 50000 500000 5493 3599 34875 20539 915776848 14352 33340 49799 40305 323964320 9847 11157 49716 29692 374854865 13747 473 34429 48469 957104182 32569 20526 33475 47000 252586212 28697 30547 37011 33715 442825744 6350 5118 49389 45210 210032813 34976 18786 48939 43097 505752907 5787 3579 30585 ...
output:
4333063267922 2163706881691 1653536562097 1162526347505 119752138581 1399143449328 1424750328920 1534773332548 3298951849097 1488901707278 5329285705656 6293914385538 6236745020123 6297771541397 4068562142442 6191997238619 1657485093290 164365560716 2810210202294 2169511819512 4077951500428 61575328...
result:
ok 500000 lines
Test #9:
score: 0
Accepted
time: 2323ms
memory: 82784kb
input:
50000 50000 500000 21621 19739 48132 24209 895126102 10425 12289 33787 17496 901235799 20287 6126 49806 38197 742049381 15050 46191 18201 48491 396368422 40078 44778 47223 44910 979932773 3558 30731 29923 48961 335125614 1319 31288 48642 48550 620834922 6539 10531 10836 23319 598543018 4272 19314 20...
output:
5631187987076 3250751355342 1408147164258 2769007358382 5786945200725 6255130298882 2326182441673 6251015483539 5279985931756 6247016231039 6002489899331 5739531624923 1695978188532 4119040195445 3365218517064 6257256513131 4393164116250 531693512680 5980905688646 1666797293417 5099517190339 6063207...
result:
ok 500000 lines