#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll inf=2e18,N=2e5+10;
ll a[N],pre[N],suf[N];
pair<ll,ll> qry[N];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// ll tp=9e18;
// cout<<tp<<endl;
ll n,q;
cin>>n>>q;
a[0]=-inf;
a[n+1]=inf;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
qry[0].first=0;
qry[0].second=0;
for(int i=1;i<=q;i++)
{
cin>>qry[i].first;
qry[i].second=i;
if(i>1)qry[i].first+=qry[i-1].first;
}
sort(qry,qry+q+1);
pre[0]=qry[0].second;
for(int i=1;i<=q;i++)
{
pre[i]=min(pre[i-1],qry[i].second);
}
suf[q]=qry[q].second;
for(int i=q-1;i>=0;i--)
{
suf[i]=min(suf[i+1],qry[i].second);
}
for(int i=1;i<=n;i++)
{
// a[i-1] .. a[i] .. a[i+1]
// find min x a[i-1]<=x and x<=a[i]
// time(x+1,i-1)>time(x,i)
ll l=a[i-1]-1,r=a[i];
while(l+1<r)
{
ll mid=(l+r)/2;
bool pos=0;
ll fi=q+1,fi1=q+1;
int it=0;
it=lower_bound(qry,qry+q+1,make_pair(mid-a[i],q+1ll))-qry;
if(it>0)
{
fi=pre[it-1];
}
it=lower_bound(qry,qry+q+1,make_pair(mid+1-a[i-1],-1ll))-qry;
if(it!=(q+1))
{
fi1=suf[it];
}
if(fi<fi1)
{
r=mid;
}
else
{
l=mid;
}
}
ll st=r;
l=a[i],r=a[i+1]+1;
while(l+1<r)
{
ll mid=(l+r)/2;
bool pos=0;
ll fi=q+1,fi1=q+1;
// >= mid-a[i]
int it=0;
it=lower_bound(qry,qry+q+1,make_pair(mid-a[i],-1ll))-qry;
if(it!=(q+1))
{
fi=suf[it];
}
it=lower_bound(qry,qry+q+1,make_pair(mid-1-a[i+1],q+1ll))-qry;
if(it>0)
{
fi1=pre[it-1];
}
// cout<<"For "<<i<<' '<<a[i]<<endl;
// cout<<"checking "<<mid<<' '<<fi<<' '<<fi1<<endl;
if(fi<fi1)
{
l=mid;
}
else
{
r=mid;
}
}
// cout<<"Hola "<<i<<' '<<st<<' '<<l<<endl;
cout<<l-st<<endl;
}
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |