最后 re on test15。
//Man always remember love because of romance only!
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
int X=0,w=0; char ch=0;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
return w?-X:X;
}
inline void write(int x){
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
int a[500001];
int tr[1000001],tag[1000001];
int n,q;
void pushup(int x){
tr[x]=min(tr[x<<1],tr[x<<1|1]);
}
void pushdown(int x,int l,int r){
if(tag[x]){
int mid=(l+r)/2;
tag[x<<1]+=tag[x];
tag[x<<1|1]+=tag[x];
tr[x<<1]+=tag[x];
tr[x<<1|1]+=tag[x];
tag[x]=0;
}
}
void build(int x,int l,int r){
if(l==r){
tr[x]=a[l]+(n-l+1);
return;
}
int mid=(l+r)/2;
build(x<<1,l,mid);
build(x<<1|1,mid+1,r);
pushup(x);
}
void update(int x,int k,int l,int r,int nl,int nr){
if(nl<=l&&nr>=r){
tr[x]+=k;
tag[x]+=k;
return;
}
pushdown(x,l,r);
int mid=(l+r)/2;
if(mid>=nl) update(x<<1,k,l,mid,nl,nr);
if(mid<nr) update(x<<1|1,k,mid+1,r,nl,nr);
pushup(x);
}
int query(int x,int l,int r,int nl,int nr){
if(nl<=l&&nr>=r) return tr[x];
int res=2e9;
int mid=(l+r)/2;
pushdown(x,l,r);
if(mid>=nl) res=min(res,query(x<<1,l,mid,nl,nr));
if(mid<nr) res=min(res,query(x<<1|1,mid+1,r,nl,nr));
return res;
}
int minn[1000010][5];
signed main(){
n=read(),q=read();
for(int i=1;i<=n;i++) a[i]=read();
sort(a+1,a+n+1);
build(1,1,n);
minn[0][0]=minn[n+1][1]=2e9;
for(int i=1;i<=n;i++) minn[i][0]=min(minn[i-1][0],a[i]);
for(int i=n;i;i--) minn[i][1]=min(minn[i+1][1],a[i]);
int minn1=2e9;
for(int i=1;i<n;i++) minn1=min(minn1,a[i]-i+1);
int sum1=0;
for(int i=1;i<n;i++) sum1+=(a[i]-(minn1+i-1));
int minn2=2e9;
for(int i=1;i<=n;i++) minn2=min(minn2,a[i]-i+1);
int sum2=0;
for(int i=1;i<=n;i++) sum2+=(a[i]-(minn2+i-1));
while(q--){
int k=read();
if(k<=n){
int tp=query(1,1,n,1,1);
update(1,a[1]+k-tp,1,n,1,n);
int res=minn[k+1][1];
res=min(res,query(1,1,n,1,k));
write(res);
printf(" ");
}else{
if((k-n)%2!=0){
int res;
if((k-n+1)/2<=sum1) res=min(minn1+k,a[n]);
else{
int sb=k;
k=(k-n+1)/2;
k-=sum1;
int le=k/(n-1);
if(k%(n-1)!=0) le++;
res=min(minn1-le+sb,a[n]);
}
write(res);
printf(" ");
}else{
int res;
if((k-n)/2<=sum2) res=minn2+k;
else{
int sb=k;
k=(k-n)/2;
k-=sum2;
int le=k/n;
if(k%n!=0) le++;
res=minn2-le+sb;
}
write(res);
printf(" ");
}
}
}
return 0;
}