제출 #404767

#제출 시각아이디문제언어결과실행 시간메모리
404767ScarletSSnowball (JOI21_ho_t2)C++17
100 / 100
154 ms16964 KiB
#include <bits/stdc++.h>
#define int long long
#define sz(x) (int)(x).size()
using namespace std;

int ans[200000];

signed main()
{
    ios_base::sync_with_stdio(0); cin.tie(0);
    int n,m,x=0,y=0,z=0,k;
    cin>>n>>m;
    int a[n];
    vector<array<int,2>> v(n-1),w(n-1);
    for (int i=0;i<n;++i)
        cin>>a[i];
    for (int i=0;i+1<n;++i)
        v[i]=w[i]={a[i+1]-a[i],i};
    sort(v.rbegin(), v.rend());
    sort(w.rbegin(), w.rend());
    while (m--)
    {
        cin>>k;
        z+=k;
        if (k<0)
        {
            while (!v.empty()&&v.back()[0]<=y-z)
            {
                ans[v.back()[1]+1]+=max(v.back()[0]-y,-x);
                //cout<<v.back()[1]+1<<" "<<v.back()[0]-y<<"\n";
                v.pop_back();
            }
        }
        else
        {
            while (!w.empty()&&w.back()[0]<=z-x)
            {
                ans[w.back()[1]]+=max(w.back()[0]+x,y);
                //cout<<w.back()[1]<<" "<<w.back()[0]+x<<"\n";
                w.pop_back();
            }
        }
        x=min(x,z);
        y=max(y,z);
        //cout<<"updated"<<"\n";
    }
    for (auto i : v)
        ans[i[1]+1]-=x;
    for (auto i : w)
        ans[i[1]]+=y;
    ans[0]+=-x;
    ans[n-1]+=y;
    for (int i=0;i<n;++i)
        cout<<ans[i]<<"\n";
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...