제출 #1174366

#제출 시각아이디문제언어결과실행 시간메모리
1174366Hamed_GhaffariSnowball (JOI21_ho_t2)C++20
33 / 100
2595 ms2044 KiB
#include<bits/stdc++.h>
using namespace std;

using ll = long long;

const int MXN = 2e5+5;

int n, q;
ll x[MXN], w[MXN], ans[MXN];

int32_t main() {
    cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0);
    cin >> n >> q;
    for(int i=1; i<=n; i++) cin >> x[i];
    ll mn = 0, mx = 0;
    for(int i=1; i<=q; i++ ){
        cin >> w[i];
        w[i] += w[i-1];
        mn = min(mn, w[i]);
        mx = max(mx, w[i]);
    }
    for(int i=1; i<n; i++)
        if(x[i]+mx < x[i+1]+mn) {
            ans[i] += mx;
            ans[i+1] += -mn;
        }
        else {
            ll l=x[i], r=x[i+1]+1, m;
            while(r-l>1) {
                m = ((l+r)/2);
                bool bad=0;
                for(int j=0; j<=q; j++)
                    if(x[i]+w[j]>=m) break;
                    else if(x[i+1]+w[j]<=m-1) {
                        bad = 1;
                        break;
                    }
                (bad ? r : l) = m;
            }
            ans[i] += l-x[i];
            ans[i+1] += x[i+1]-l;
        }
    ans[1] -= mn;
    ans[n] += mx;
    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...