This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;int Q;
int xar[200005];
int adar[200005];
int psad[200005];
int mnad[200005];
int mxad[200005];
int lans[200005];
int rans[200005];
signed main(){
cin>>n>>Q;
for(int i=1;i<=n;i++){
cin>>xar[i];
}
for(int i=1;i<=Q;i++){
cin>>adar[i];
psad[i]=adar[i]+psad[i-1];
mnad[i]=min(mnad[i-1],psad[i]);
mxad[i]=max(mxad[i-1],psad[i]);
}
lans[1]=xar[1]+mnad[Q];
rans[n]=xar[n]+mxad[Q];
for(int i=1;i<=n-1;i++){
int l=0;int r=Q;
while(l<r){
int mi=l+(r-l+1)/2;
if( xar[i]+mxad[mi]<=xar[i+1]+mnad[mi] ){
l=mi;
}else{
r=mi-1;
}
}
if( ((l==Q)||(l!=Q&&adar[l+1]<0)) ){
rans[i]=xar[i]+mxad[l];
}else{
rans[i]=xar[i+1]+mnad[l];
}
}
for(int i=n;i>=2;i--){
int l=0;int r=Q;
while(l<r){
int mi=l+(r-l+1)/2;
if( xar[i]+mnad[mi]>=xar[i-1]+mxad[mi] ){
l=mi;
}else{
r=mi-1;
}
}
if( (l==Q||adar[l+1]>0) ){
lans[i]=xar[i]+mnad[l];
}else{
lans[i]=xar[i-1]+mxad[l];
}
}
for(int i=1;i<=n;i++){
cout<<rans[i]-lans[i]<<endl;
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |