#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |