Submission #1239701

#TimeUsernameProblemLanguageResultExecution timeMemory
1239701nasjesSnowball (JOI21_ho_t2)C++20
100 / 100
156 ms11424 KiB
#include <iostream> #include <iomanip> #include <vector> #include <cmath> #include <algorithm> #include <set> #include <queue> #include <map> #include <stack> #include <bitset> #include <string> #include <cstring> #include <iterator> #include <random> using namespace std; typedef long long ll; typedef pair<ll, ll> pll; typedef long double ld; const ll dim = 1e6+7; //const ll mod = 1e9 + 7; const ll inf = 1e18 + 77; #define endl "\n" #define fi first #define pb push_back #define se second #define vll vector<ll> ll n, a[dim], sz[dim], q; ll pr[dim], dx[dim], lft[dim], rt[dim]; int main(){ cin>>n>>q; for(int i=1; i<=n; i++){ cin>>a[i]; } for(int i=1; i<=q; i++){ cin>>dx[i]; pr[i]=pr[i-1]+dx[i]; lft[i]=min(pr[i], lft[i-1]); rt[i]=max(pr[i], rt[i-1]); } for(int i=1; i<=q; i++){ lft[i]=abs(lft[i]); } a[n+1]=inf; a[0]=-inf; sz[1]+=lft[q]; for(int i=1; i<=n; i++){ if(rt[q]+a[i]<=a[i+1]-lft[q]){ sz[i]+=rt[q]; sz[i+1]+=lft[q]; } else{ ll l=0; ll r=q; while(r-l>=1){ ll mid=(l+r+1)/2; if(rt[mid]+a[i]>a[i+1]-lft[mid]){ r=mid-1; } else{ l=mid; } } if(pr[l+1]>0){ sz[i+1]+=lft[l]; sz[i]+=min(a[i+1]-a[i]-lft[l],rt[l+1]); } else{ sz[i]+=rt[l]; sz[i+1]+=min(a[i+1]-a[i]-rt[l],lft[l+1]); } } } for(int i=1; i<=n; i++){ cout<<sz[i]<<endl; } cout<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...