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;}