QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#187531 | #3850. DJ Darko | Daas# | TL | 3992ms | 15216kb | C++14 | 2.6kb | 2023-09-24 17:57:11 | 2023-09-24 17:57:11 |
Judging History
answer
#include<bits/stdc++.h>
#define N 200005
using namespace std;
const long long inf=1e18;
int n,Q,b[N],L[N],R[N],bl[N],Len,p[N];
long long a[N],tag[N],sum[N],sum1[N],bj[N];
int read() {
int kkk=0,x=1;
char c=getchar();
while((c<'0' || c>'9') && c!='-') c=getchar();
if(c=='-') c=getchar(),x=-1;
while(c>='0' && c<='9') kkk=kkk*10+(c-'0'),c=getchar();
return kkk*x;
}
void Down(int x) {
if(bj[x]!=inf) {
for(int l0=L[x],r0=R[x]; l0<=r0; ++l0)a[l0]=bj[x]+tag[x];
} else if(tag[x]) {
for(int l0=L[x],r0=R[x]; l0<=r0; ++l0)a[l0]+=tag[x];
}
tag[x]=0,bj[x]=inf;
}
bool cmp(int x,int y) {
return a[x]<a[y];
}
void Update(int x) {
sort(p+L[x],p+R[x]+1,cmp),sum1[L[x]]=b[p[L[x]]];
for(int l0=L[x]+1,r0=R[x]; l0<=r0; ++l0)sum1[l0]=sum1[l0-1]+b[p[l0]];
tag[x]=0,bj[x]=inf;
}
int Find(int l,int r,long long x) {
int mid,ans=0;
while(l<=r) {
mid=(l+r)>>1;
if(a[p[mid]]<=x)ans=mid,l=mid+1;
else r=mid-1;
}
return ans;
}
bool Check(int l,int r,long long x) {
long long ans=0;
if(bl[l]==bl[r]) {
Down(bl[l]);
for(int i=l; i<=r; ++i)if(a[i]<=x)ans+=b[i];
} else {
Down(bl[l]),Down(bl[r]);
for(int j=L[bl[r]]; j<=r; ++j)if(a[j]<=x)ans+=b[j];
for(int j=R[bl[l]]; j>=l; --j)if(a[j]<=x)ans+=b[j];
for(int j=bl[l]+1; j<bl[r]; ++j)
if(bj[j]!=1e18) {
if(bj[j]+tag[j]<=x)ans+=sum[R[j]]-sum[L[j]-1];
} else ans+=sum1[Find(L[j],R[j],x-tag[j])];
}
return ans*2>=sum[r]-sum[l-1];
}
int main() {
n=read(),Q=read(),Len=400;
for(int i=1; i<=n; ++i)a[i]=read(),p[i]=i,bj[i]=inf;
for(int i=1; i<=n; ++i)b[i]=read(),sum[i]=sum[i-1]+b[i];
for(int i=1; i<=n; ++i) {
R[bl[i]=i/Len+1]=i;
if(!L[bl[i]])L[bl[i]]=i;
}
for(int i=1; i<=bl[n]; ++i)Update(i);
for(int i=1,op,l,r,x; i<=Q; ++i) {
op=read(),l=read(),r=read();
if(op==1) {
x=read();
if(bl[l]==bl[r]) {
Down(bl[l]);
for(int j=l; j<=r; ++j)a[j]+=x;
Update(bl[l]);
} else {
Down(bl[l]),Down(bl[r]);
for(int j=L[bl[r]]; j<=r; ++j)a[j]+=x;
for(int j=R[bl[l]]; j>=l; --j)a[j]+=x;
Update(bl[l]),Update(bl[r]);
for(int j=bl[l]+1; j<bl[r]; ++j)tag[j]+=x;
}
} else {
long long ll=-2e14,rr=2e14,mid,ans;
while(ll<=rr) {
mid=ll+rr>>1;
if(Check(l,r,mid))ans=mid,rr=mid-1;
else ll=mid+1;
}
if(bl[l]==bl[r]) {
Down(bl[l]);
for(int j=l; j<=r; ++j)a[j]=ans;
Update(bl[l]);
} else {
Down(bl[l]),Down(bl[r]);
for(int j=L[bl[r]]; j<=r; ++j)a[j]=ans;
for(int j=R[bl[l]]; j>=l; --j)a[j]=ans;
Update(bl[l]),Update(bl[r]);
for(int j=bl[l]+1; j<bl[r]; ++j)bj[j]=ans,tag[j]=0;
}
cout<<ans<<"\n";
}
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 3992ms
memory: 15032kb
input:
200000 200000 185413631 745038744 881479208 394948467 101727403 796960399 284541402 80768155 286582974 546327406 197495962 552359542 727479505 437895671 143092948 7626834 741609268 540494577 298656274 548860413 41137417 210529949 658779847 161355446 486548926 602900245 119414972 310187428 238177860 ...
output:
462406736 1749348519 1749348519 467651597 874061694 874061694 874061694 874061694 -1521749 874061694 -893932302 -425504259 -425504259 332034115 332034115 86195778 86195778 86195778 86195778 86195778 -425504259 -165776398 -165776398 -165776398 -916781043 -254293799 -254293799 -254293799 -254293799 -8...
result:
ok 100093 lines
Test #2:
score: 0
Accepted
time: 3955ms
memory: 15216kb
input:
200000 200000 972602488 314379868 184424413 693297170 700590031 777123666 30306102 166401429 402684895 653689101 215770359 161277184 972006312 379507241 52836126 481985240 481425913 456361236 149694150 336596790 22492952 154063153 414263227 854090461 603168307 194806250 934267524 8018143 119175379 8...
output:
459983042 459983042 459983042 459983042 459983042 459983042 459983042 459983042 459983042 459983042 459983042 1337072802 1189453446 1337072802 1189453446 1337072802 1189453446 1189453446 1189453446 1189453446 1189453446 1189453446 1189453446 1189453446 1189453446 1189453446 1189453446 1189453446 118...
result:
ok 100009 lines
Test #3:
score: -100
Time Limit Exceeded
input:
200000 200000 54451649 780255224 110478287 601059692 134896126 720758367 64302994 897948958 504280517 267611424 47310537 600352950 155295586 22375940 972388036 8479064 47904993 413885666 778337500 61878536 883229478 949122833 150124767 904785808 3877919 68702856 282619557 29644659 326058655 43935186...
output:
960711412 464459420 466826314 755354030 755354030 1576987719 653317168 755354030 653317168 653317168 653317168 755354030 755354030 755354030 755354030 755354030 755354030 949620275 949620275 949620275 1079046141 1201296119 1079046141 427993693 427993693 427993693 427993693 427993693 427993693 735104...