제출 #1173125

#제출 시각아이디문제언어결과실행 시간메모리
1173125AlgorithmWarriorSnowball (JOI21_ho_t2)C++20
100 / 100
158 ms9828 KiB
#include <bits/stdc++.h> using namespace std; int const MAX=2e5+5; int n,q; long long pos[MAX]; long long sp[MAX]; long long minpref[MAX]; long long maxpref[MAX]; long long ans[MAX]; void read(){ cin>>n>>q; int i; for(i=1;i<=n;++i) cin>>pos[i]; for(i=1;i<=q;++i){ cin>>sp[i]; sp[i]+=sp[i-1]; minpref[i]=min(minpref[i-1],sp[i]); maxpref[i]=max(maxpref[i-1],sp[i]); } } void solve(){ ans[1]-=minpref[q]; ans[n]+=maxpref[q]; int i; for(i=1;i<n;++i){ long long dist=pos[i+1]-pos[i]; if(maxpref[q]-minpref[q]<=dist){ ans[i]+=maxpref[q]; ans[i+1]-=minpref[q]; } else{ int st=0,dr=q; /// [) while(dr-st>1){ int mij=(st+dr)/2; if(maxpref[mij]-minpref[mij]<=dist) st=mij; else dr=mij; } if(sp[dr]<sp[st]){ ans[i]+=maxpref[st]; ans[i+1]+=dist-maxpref[st]; } else{ ans[i+1]-=minpref[st]; ans[i]+=dist+minpref[st]; } } } } void write(){ int i; for(i=1;i<=n;++i) cout<<ans[i]<<'\n'; } int main() { read(); solve(); write(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...