제출 #1131392

#제출 시각아이디문제언어결과실행 시간메모리
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...