代码如下:
#include<cstdio>
#define mid (l+r)>>1
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define M 200001
#define max(a,b) (a)>(b)?(a):(b)
#define min(a,b) (a)<(b)?(a):(b)
int Max[M<<2],w,h,n,x;
void PushPlus(int rt){
Max[rt] = max(Max[rt<<1],Max[rt<<1|1]);
}
void Bulid(int l,int r,int rt){
Max[rt] = w;
if(l == r)
return ;
int m = mid;
Bulid(lson);
Bulid(rson);
}
int Query(int p,int l,int r,int rt){
if(l == r){
Max[rt]-=p;
return l;
}
int m = mid;
int ans;
ans = p<=Max[rt<<1]? Query(p,lson):Query(p,rson);
PushPlus(rt);
return ans;
}
int main(){
while(~scanf("%d %d %d",&h,&w,&n)){
h = min(h,n);
Bulid(1,h,1);
while(n--){
scanf("%d",&x);
printf("%d\n",(Max[1]<x?-1:Query(x,1,h,1) ));
}
}
return 0;
}