Submission #1155709

#TimeUsernameProblemLanguageResultExecution timeMemory
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...