zoukankan      html  css  js  c++  java
  • hdu 2795(单点改动)

    题意:有h×w大的公告板。有n条公告要写入,每条公告高度都是1,宽度是wi,每次从最上最左的空位写,假设有空位输出第几行。假设没有足够空位输出-1。
    题解:注意h最大1e9。但事实上是看n的大小。由于假设有n条公告最多占n行,所以线段树最大是min(h,n)。

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    const int N = 200005;
    int h, w, n, sum[N << 2];
    
    void pushup(int k) {
        sum[k] = max(sum[k * 2], sum[k * 2 + 1]);
    }
    
    void build(int k, int left, int right) {
        if (left == right) {
            sum[k] = w;
            return;
        }
        int mid = (left + right) / 2;
        build(k * 2, left, mid);
        build(k * 2 + 1, mid + 1, right);
        pushup(k);
    }
    
    int query(int k, int left, int right, int x) {
        if (left == right) {
            sum[k] -= x;
            return left;
        }
        int mid = (left + right) / 2, res = -1;
        if (sum[k * 2] >= x)
            res = query(k * 2, left, mid, x);
        else if (sum[k * 2 + 1] >= x)
            res = query(k * 2 + 1, mid + 1, right, x);
        pushup(k);
        return res;
    }
    
    int main() {
        while (scanf("%d%d%d", &h, &w, &n) == 3) {
            int temp = h < n ? h : n;
            build(1, 1, temp);
            int x;
            for (int i = 0; i < n; i++) {
                scanf("%d", &x);
                if (x > w || sum[1] < x)
                    printf("-1
    ");
                else
                    printf("%d
    ", query(1, 1, temp, x));
            }
        }
        return 0;
    }
  • 相关阅读:
    postman使用
    web应用服务器性能监控及调优
    软件测试的相关网站
    web测试点梳理
    HTTP协议详解
    Fidder详解之get和post请求
    浅谈HTTPS协议
    APP测试基本流程
    Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
    为学日益,为道日损
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7203818.html
Copyright © 2011-2022 走看看