#include<iostream>
#include<stdio.h>
#include<string.h>
#include<cmath>
#include<algorithm>
#define L(x) (x<<1)
#define R(x) (x<<1|1)
#define MAX 200010
using namespace std;
struct node
{
int l,r;
int val;
}a[MAX*3];
int w;
void build(int t,int l,int r)
{
a[t].l=l;
a[t].r=r;
a[t].val=w;
if(l==r)
{
return;
}
int mid=(l+r)>>1;
build(L(t),l,mid);
build(R(t),mid+1,r);
}
int update(int t,int val)
{
if(a[t].val<val)
return -1;
if(a[t].l==a[t].r)
{
a[t].val-=val;
return a[t].l;
}
int mid=(a[t].l+a[t].r)>>1;
int ans=-1;
if(val<=a[L(t)].val)
ans=update(L(t),val);
else
if(val<=a[R(t)].val)
ans=update(R(t),val);
a[t].val=max(a[L(t)].val,a[R(t)].val);
return ans;
}
int main()
{
int h;
int n;
while(scanf("%d%d%d",&h,&w,&n)!=EOF)
{
build(1,1,min(h,n));
while(n--)
{
scanf("%d",&h);
printf("%d\n",update(1,h));
}
}
}
hdu2795
最新推荐文章于 2020-04-01 19:23:32 发布