Billboard

来源:互联网 发布:绿色傲剑明玉功数据 编辑:程序博客网 时间:2024/05/10 03:44

http://acm.hdu.edu.cn/showproblem.php?pid=2795


#include <cstdio>#include <cstring>#include <cstdlib>#include <string>#include <map>#include <iostream>#include <stdexcept>#include <cstddef>#include <algorithm>#include <vector>#include <numeric>#include <cctype>#define LL long long#define Endl endl#define INF 0x7fffffff//#define WJusing namespace std;const int maxn=200010;int Max[maxn<<2];int w,h;void PushUp(int rt){Max[rt]=max(Max[rt<<1],Max[rt<<1|1]);}void build(int l,int r,int rt){Max[rt]=w;if(l==r)return ;int m=(l+r)>>1;build(l,m,rt<<1);build(m+1,r,rt<<1|1);}int query(int x,int l,int r,int rt){if(l==r){Max[rt]-=x; return l;}int m=(l+r)>>1;int ret=(Max[rt<<1]>=x)? query(x,l,m,rt<<1):query(x,m+1,r,rt<<1|1);PushUp(rt);return ret;}int main(int argc, char *argv[]){#ifdef WJ//freopen("in.txt","r",stdin);freopen("out.txt","w",stdout);#endifint n;while(~scanf("%d%d%d",&h,&w,&n)){if(h>n) h=n; build(1,h,1);int x;while(n--){scanf("%d",&x);if(Max[1]<x) printf("-1\n");else printf("%d\n",query(x,1,h,1));}}return 0;}


0 0