#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define FOR(i, a, b) for(int i = a ; i <= b ; i++)
#define FORD(i, a, b) for(int i = a ; i >= b ; i--)
#define REP(i, a, b) for(int i = a ; i < b ; i++)
const bool Multitest = 0, Local = 0;
const int N = 2e5 + 10;
int n, q;
ll a[N], b[N];
ll mad[N], mid[N];
ll l[N], r[N];
void cal(int p1, int p2)
{
if(a[p1] + mad[q] < a[p2] + mid[q])
{
r[p1] = mad[q];
l[p2] = abs(mid[q]);
return;
}
int low = 1, high = q, p = -1;
while(low <= high)
{
int m = (low + high) >> 1;
if(a[p1] + mad[m] >= a[p2] + mid[m]) high = m - 1, p = m;
else low = m + 1;
}
if(b[p] < 0) // di qua trai
{
r[p1] = mad[p];
l[p2] = (a[p2] - a[p1]) - r[p1];
}
else
{
l[p2] = abs(mid[p]);
r[p1] = (a[p2] - a[p1]) - l[p2];
}
}
void work()
{
cin >> n >> q;
for(int i = 1 ; i <= n ; i++) cin >> a[i];
sort(a + 1, a + 1 + n);
a[0] = -1e18, a[n + 1] = 1e18;
FOR(i, 1, q)
{
cin >> b[i];
}
ll s = 0;
FOR(i, 1, q)
{
s += b[i];
mid[i] = min(mid[i - 1], s);
mad[i] = max(mad[i - 1], s);
}
FOR(i, 0, n) cal(i, i + 1);
FOR(i, 1, n) cout << l[i] + r[i] << ' ';
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int q = 1;
if(Local && fopen("code.inp", "r"))
{
freopen("code.inp", "r", stdin);
freopen("code.ans", "w", stdout);
}
if(Multitest) cin >> q;
while(q--) work();
}
Compilation message (stderr)
Main.cpp: In function 'int main()':
Main.cpp:90:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
90 | freopen("code.inp", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:91:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
91 | freopen("code.ans", "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |