• HDU 2795 Billboard 线段树


      题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2795

      题目描述: 一个h * w的木板, 要将n个1 * L[i]的木条放进去, 要求的优先最上面, 优先最左面, 输出放入每一个木条应放入的行号

      解题思路: 查询区间最大值, 并且尽可能的向靠上的(小号开头的)区间中放置, 其实我们并不关心到底是否向左放, 我们只需要保证一旦有空就靠边放就行, 所以用一个减法就完全可以表示了, 我们只需要用tree[i] 表示第i行还剩余的容量, 放置时更新最大值就可以了

      代码: 

    #include <iostream>
    #include <cstdio>
    #include <string>
    #include <vector>
    #include <map>
    #include <cstring>
    #include <iterator>
    #include <cmath>
    #include <algorithm>
    #include <stack>
    #include <deque>
    #include <map>
    
    #define lson l, m, rt<<1
    #define rson m+1, r, rt<<1|1
    using namespace std;
    
    int h, w, n;
    const int treen = 222222;
    int tree[treen<<2];
    
    void Pushup(int rt) {
        tree[rt] = max( tree[rt<<1], tree[rt<<1|1] );
    }
    void build( int l, int r, int rt ) {
        tree[rt] = w;
        if( l == r ) return;
        int m = (l + r) >> 1;
        build( lson );
        build( rson );
        return;
    }
    
    int query( int x, int l, int r, int rt ) {
        if( l == r ) {
            tree[rt] -= x;
            return l;
        }
        int m = (l + r) >> 1;
        int ret = (tree[rt<<1] >= x) ? query(x , lson) : query(x , rson);
        Pushup(rt);
        return ret;
    }
    
    int main() {
        while( ~scanf( "%d%d%d", &h, &w, &n ) ) {
            if( h > n ) h = n;
            build(1, h, 1);
            while( n-- ) {
                int L;
                scanf( "%d", &L );
                if( tree[1] < L ) printf( "-1
    " );
                else {
                    int ret = query(L, 1, h, 1);
                    printf( "%d
    ", ret );
                }
            }
        }
        return 0;
    }
    View Code

      思考: 自己码这个代码的时候特别不专心, 然后现在我接触到的线段树一个是求 最大值, 一个是求和, 然而以后肯定各种恶心的树层出不穷, 先把线段树学好, 然后进程溢出首先检查自己的输入......

  • 相关阅读:
    Windows Server 2008 R2 服务器系统安装及配置全过程图文详解
    c#多线程
    DevExpress之TreeList控件用作导航使用说明
    Windows操作系统下搭建Git服务器和客户端。
    D^3CTF 2021 8-bit-pub
    shiro-1.2.4反序列化分析踩坑
    *CTF2021 oh-my-bet
    无线网络密码破解初体验
    瑞昱rtl819x-SDK-v3.4.14b的watchdog分析
    RC4加密算法
  • 原文地址:https://www.cnblogs.com/FriskyPuppy/p/7294559.html
Copyright © 2020-2023  润新知