zoukankan      html  css  js  c++  java
  • hdu2795 Billboard

    主要是利用线段树能求区间最大值的性质完成这样一个功能 “查询最靠前能容纳广告的位置“   将位置用来建树(实际上h<=n) 树中存位置还拥有的空间,若左子树的最大值大于他

    就进入左子树,否则进入右子树。

    #include<stdio.h>
    #define maxn 200005
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    int MAX[maxn<<2],h,w,n;
    int build(int l,int r,int rt)
    {
        MAX[rt]=w;
        if(l==r) return 0;
        int m=(l+r)>>1;
        build(lson);
        build(rson);
    }
    int Pushup(int rt)
    {
        MAX[rt]=MAX[rt<<1]>MAX[rt<<1|1]?MAX[rt<<1]:MAX[rt<<1|1];
    }
    int query(int x,int l,int r,int rt)
    {
        int ret,m;
        m=(l+r)>>1;
        if(l==r) { MAX[rt]-=x;return l;}
        else ret=MAX[rt<<1]>=x?query(x,lson):query(x,rson);
        Pushup(rt);
        return ret;
    }
    int main()
    {
        int i,temp;
        while(~scanf("%d%d%d",&h,&w,&n)){
        if(h>n) h=n;
        build(1,h,1);
        for(i=1;i<=n;i++)
            {
                scanf("%d",&temp);
                if(MAX[1]<temp) printf("-1\n"); 
                else printf("%d\n",query(temp,1,h,1));
            }
        }
        return 0;
    }


  • 相关阅读:
    计算机网络知识 第一部分
    LAMP环境安装
    Axure RP 交互设计
    Axure RP 界面功能
    Axure RP 界面功能介绍
    Axure RP 第一部分
    Grub管理修改root口令
    MYSQL 部分练习题
    工作日志示例
    计算机网络的分类
  • 原文地址:https://www.cnblogs.com/zy691357966/p/5480500.html
Copyright © 2011-2022 走看看