제출 #1254616

#제출 시각아이디문제언어결과실행 시간메모리
1254616tvgkSnowball (JOI21_ho_t2)C++20
100 / 100
53 ms8872 KiB
#include<bits/stdc++.h>
using namespace std;
#define task "a"
#define se second
#define fi first
#define ll long long
#define ii pair<ll, ll>
const long mxN = 2e5 + 7;

int n, q;
ll a[mxN], ans[mxN];
ii dif[mxN];
bool vis[mxN][3];

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    //freopen(task".INP", "r", stdin);
    //freopen(task".OUT", "w", stdout);

    cin >> n >> q;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
        dif[i - 1].fi = a[i] - a[i - 1];
        dif[i - 1].se = i - 1;
    }
    sort(dif + 1, dif + n);

    int ctr = 1;
    ll mn = 0, mx = 0;
    ll cur = 0;
    for (int i = 1; i <= q; i++)
    {
        ll tmp;
        cin >> tmp;

        cur += tmp;
        mn = min(mn, cur);
        mx = max(mx, cur);

        while (ctr < n && mx - mn >= dif[ctr].fi)
        {
            vis[dif[ctr].se][1] = 1;
            vis[dif[ctr].se + 1][0] = 1;

            if (tmp > 0)
            {
                ans[dif[ctr].se] += dif[ctr].fi + mn;
                ans[dif[ctr].se + 1] -= mn;
            }
            else
            {
                ans[dif[ctr].se] += mx;
                ans[dif[ctr].se + 1] += dif[ctr].fi - mx;
            }

            ctr++;
        }
    }

    for (int i = 1; i <= n; i++)
    {
        ans[i] -= mn * (!vis[i][0]);
        ans[i] += mx * (!vis[i][1]);
        cout << ans[i] << '\n';
    }
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...