#include <iostream>
#include <iomanip>
#include <vector>
#include <cmath>
#include <algorithm>
#include <set>
#include <queue>
#include <map>
#include <stack>
#include <bitset>
#include <string>
#include <cstring>
#include <iterator>
#include <random>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef long double ld;
const ll dim = 1e6+7;
//const ll mod = 1e9 + 7;
const ll inf = 1e18 + 77;
#define endl "\n"
#define fi first
#define pb push_back
#define se second
#define vll vector<ll>
ll n, a[dim], sz[dim], q;
ll pr[dim], dx[dim], lft[dim], rt[dim];
int main(){
cin>>n>>q;
for(int i=1; i<=n; i++){
cin>>a[i];
}
for(int i=1; i<=q; i++){
cin>>dx[i];
pr[i]=pr[i-1]+dx[i];
lft[i]=min(pr[i], lft[i-1]);
rt[i]=max(pr[i], rt[i-1]);
}
for(int i=1; i<=q; i++){
lft[i]=abs(lft[i]);
}
a[n+1]=inf;
a[0]=-inf;
sz[1]+=lft[q];
for(int i=1; i<=n; i++){
if(rt[q]+a[i]<=a[i+1]-lft[q]){
sz[i]+=rt[q];
sz[i+1]+=lft[q];
}
else{
ll l=0;
ll r=q;
while(r-l>=1){
ll mid=(l+r+1)/2;
if(rt[mid]+a[i]>a[i+1]-lft[mid]){
r=mid-1;
}
else{
l=mid;
}
}
if(pr[l+1]>0){
sz[i+1]+=lft[l];
sz[i]+=min(a[i+1]-a[i]-lft[l],rt[l+1]);
}
else{
sz[i]+=rt[l];
sz[i+1]+=min(a[i+1]-a[i]-rt[l],lft[l+1]);
}
}
}
for(int i=1; i<=n; i++){
cout<<sz[i]<<endl;
}
cout<<endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |