hdu2795 线段树单点更新
来源:互联网 发布:三国志 全面战争 知乎 编辑:程序博客网 时间:2024/06/04 17:43
#include<stdio.h>#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int maxn=300000;int MAX[maxn<<2];int h,w,x;int cmp(int a,int b){ return a>b?a:b;}void PushUp(int rt){ MAX[rt]=cmp(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(lson); build(rson);}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,lson):query(x,rson); PushUp(rt); return ret;}int main(){ int t; while(scanf("%d%d%d",&h,&w,&x)!=EOF) { if(h>x) h=x; build(1,h,1); for(int i=0; i<x; i++) { scanf("%d",&t); if(MAX[1]<t) { printf("-1\n"); } else { printf("%d\n",query(t,1,h,1)); } } } return 0;}