# include <stdio.h>
# define lson l,m,rt<<1
# define rson m+1,r,rt<<1|1
# define maxn 200005
int sum[maxn<<2];
int h,w,n;
int max(int a,int b){
return a>b?a:b;
}
void Pushup(int rt){
sum[rt]=max(sum[rt<<1],sum[rt<<1|1]);
}
void build(int l,int r,int rt){
sum[rt]=w;
if(l==r){
return ;
}
int m=(l+r)>>1;
build(lson);
build(rson);
}
int query(int x,int l,int r,int rt){
int ret=0;
int m=(l+r)>>1;
if(l==r){
sum[rt]-=x;
return l;
}
ret=sum[rt<<1]>=x?query(x,lson):query(x,rson);
Pushup(rt);
return ret;
}
int main (){
while(scanf("%d%d%d",&h,&w,&n)!=EOF){
if(h>n) h=n;
build(1,h,1);
for(int i=0;i<n;i++){
int x;
scanf("%d",&x);
if(sum[1]<x) printf("-1\n");
else printf("%d\n",query(x,1,h,1));
}
}
return 0;
}
notonlysuccess 线段树的叶子节点是每一行的最大存储值 根节点存的区间内的最大存储值
hdu 2795
最新推荐文章于 2019-05-29 13:40:16 发布