Submission #1131392

#TimeUsernameProblemLanguageResultExecution timeMemory
1131392ByeWorldSnowball (JOI21_ho_t2)C++20
100 / 100
178 ms10208 KiB
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#define int long long
#define ll long long
#define pb push_back
#define fi first
#define se second
#define lf (id<<1)
#define rg ((id<<1)|1)
#define md ((l+r)>>1)
#define ld long double
using namespace std;
typedef pair<int,int> pii;
typedef pair<char,char> pcc;
typedef pair<int,pii> ipii;
typedef pair<pii,pii> ipiii;
const int MAXN = 1e6+10;
const int MAXA = 1e6;
const int MOD = 1e9+7;
const int INF = 1e18+10;
const int LOG = 21;
const ld EPS = 1e-12;
void chmx(int &a, int b){ a = max(a, b); }
void chmn(int &a, int b){ a = min(a, b); }

int n, q;
int a[MAXN], le[MAXN], ri[MAXN], ans[MAXN];
vector <int> vec;

signed main(){
    // ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin >> n >> q;
    for(int i=1; i<=n; i++) cin >> a[i];
    sort(a+1, a+n+1);
    vec.pb(-INF);
    int lei = 0, rii = 0, nw = 0;
    for(int i=1; i<=q; i++){
        int x; cin >> x; nw += x;
        if(nw < lei){
            vec.pb(nw-lei); lei = nw;
        } 
        if(rii < nw){
            vec.pb(nw-rii); rii = nw;
        }
    }
    // for(auto in : vec) cout << in << " in\n";
    int siz = vec.size()-1;
    for(int i=1; i<vec.size(); i++){
        le[i] = le[i-1]; ri[i] = ri[i-1];
        if(vec[i] < 0) le[i] += -vec[i];
        else ri[i] += vec[i];
    }

    for(int i=1; i+1<=n; i++){
        int dis = a[i+1]-a[i];

        int l=1, r=siz, mid=0, cnt=0;
        while(l<=r){
            mid = md;
            if(le[mid]+ri[mid] < dis) cnt = mid, l = mid+1;
            else r = mid-1;
        }
        ans[i] += ri[cnt]; ans[i+1] += le[cnt];
        if(cnt != siz){
            int sis = dis-ri[cnt]-le[cnt];
            cnt++;
            if(vec[cnt] < 0) ans[i+1] += sis;
            else ans[i] += sis;
        } 
    }
    ans[1] += le[siz]; ans[n] += ri[siz];
    for(int i=1; i<=n; i++) cout << ans[i] << " \n";
} 
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...