标签:
3 5 5 2 4 3 3 3
1 2 1 3 -1
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
#include<stack>
using namespace std;
const int maxn = 200001;
struct node
{
int l;
int r;
int cnt;
}q[maxn<<4];
int h,w,n;
void build(int l,int r,int rt)
{
q[rt].l = l;
q[rt].r = r;
q[rt].cnt = 0;
if(q[rt].l == q[rt].r)
{
q[rt].cnt = w;
return ;
}
int mid = (l+r)>>1;
build(l,mid,rt<<1);
build(mid+1,r,rt<<1|1);
q[rt].cnt = max(q[rt<<1].cnt,q[rt<<1|1].cnt);
}
int qurry(int k,int l,int r,int rt)
{
if(q[rt].l == q[rt].r)
{
q[rt].cnt -= k;
return q[rt].l;
}
int mid = (l+r)>>1;
int ans = 0;
if(q[rt<<1].cnt>=k)
{
ans = qurry(k,l,mid,rt<<1);
}
else
{
ans = qurry(k,mid+1,r,rt<<1|1);
}
q[rt].cnt = max(q[rt<<1].cnt,q[rt<<1|1].cnt);
return ans;
}
int main()
{
while(scanf("%d%d%d",&h,&w,&n)!=EOF)
{
if(h>n)
{
h = n;
}
build(1,h,1);
while(n--)
{
int m;
scanf("%d",&m);
if(m>q[1].cnt)
{
printf("-1\n");
}
else
{
int ans = qurry(m,1,h,1);
printf("%d\n",ans);
}
}
}
return 0;
}
标签:
原文地址:http://blog.csdn.net/yeguxin/article/details/44945535