제출 #1155709

#제출 시각아이디문제언어결과실행 시간메모리
1155709dnnndaSnowball (JOI21_ho_t2)C++20
100 / 100
73 ms11420 KiB
#include<bits/stdc++.h> using namespace std; #define S second #define F first #define ll long long //#define int long long //#pragma GCC optimize("Ofast, unroll-loop") //#pragma GCC target("avx,avx2") #pragma GCC optimize("O3") const int inf=0x3f3f3f3f; const ll inff=0x3f3f3f3f3f3f3f3f; const int X=1000000007; ll pre[200005], mn[200005], mx[200005], ans[200005]; ll x[200005], w[200005]; signed main(){ ios::sync_with_stdio(0), cin.tie(0); int n, q; cin >> n >> q; for(int i=1 ; i<=n ; i++) cin >> x[i]; for(int i=1 ; i<=q ; i++){ cin >> w[i]; pre[i]=pre[i-1]+w[i]; mn[i]=min(mn[i-1],pre[i]); mx[i]=max(mx[i-1],pre[i]); } ans[1]+=-mn[q], ans[n]+=mx[q]; for(int i=1 ; i<n ; i++){ ll d=x[i+1]-x[i]; if(mx[q]-mn[q]<=d) ans[i]+=mx[q], ans[i+1]-=mn[q]; else{ int t=0; for(int jump=q ; jump ; jump>>=1){ while(t+jump<q&&mx[t+jump]-mn[t+jump]<d) t+=jump; } if(w[t+1]<0) ans[i]+=mx[t], ans[i+1]+=d-mx[t]; else ans[i]+=d+mn[t], ans[i+1]-=mn[t]; } } for(int i=1 ; i<=n ; i++) cout << ans[i] << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...