哎。。以前建树的方法弱爆了。。T。T 只能建满二叉树,现在终于学会建树了
自己好久都做不掉,看了别人的代码,才过的。。我只能说,我不会建树。。
#include<stdio.h>
#include<string.h>
int n,h,w,tree[1000000];
void buildtree(int l,int r,int numb){
tree[numb]=w;
if(l==r){
return;
}
int mid=(l+r)/2;
buildtree(l,mid,numb*2);
buildtree(mid+1,r,numb*2+1);
}
int find(int l,int r,int value,int numb){
if(r==l){
tree[numb]-=value;
return r;
}
int mid=(l+r)/2;
int now=tree[numb*2]>=value?find(l,mid,value,numb*2):find(mid+1,r,value,numb*2+1);
tree[numb]=tree[numb*2]>tree[numb*2+1]?tree[numb*2]:tree[numb*2+1];
return now;
}
int main(){
while(scanf("%d%d%d",&h,&w,&n)!=EOF){
if(h>n){
h=n;
}
buildtree(1,h,1);
while(n--){
int now;
scanf("%d",&now);
if(tree[1]>=now){
printf("%d\n",find(1,h,now,1));
}
else{
printf("-1\n");
}
}
}
return 0;
}