HDU 2795 Billboard(线段树单点更新)
来源:互联网 发布:iis7怎么执行php 编辑:程序博客网 时间:2024/04/26 12:50
题意: h*w的木板, 放进一些1*L的物品, 求每次放的可以放的最上面的位置, 放了之后就占据相应的位置
思路: 维护1-h线段的线段树 每段长w 然后不断维护区间的最大值 查询的时候优先往左儿子(相当于向上)
然后就是单点更新的裸题了
代码:
//// Created by TaoSama on 2015-09-18// Copyright (c) 2015 TaoSama. All rights reserved.////#pragma comment(linker, "/STACK:1024000000,1024000000")#include <algorithm>#include <cctype>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iomanip>#include <iostream>#include <map>#include <queue>#include <string>#include <set>#include <vector>using namespace std;#define pr(x) cout << #x << " = " << x << " "#define prln(x) cout << #x << " = " << x << endlconst int N = 2e5 + 10, INF = 0x3f3f3f3f, MOD = 1e9 + 7;int w, n, q;#define root 1, n, 1#define lson l, m, rt << 1#define rson m + 1, r, rt << 1 | 1int maxv[N << 2];void push_up(int rt) { maxv[rt] = max(maxv[rt << 1], maxv[rt << 1 | 1]);}void build(int l, int r, int rt) { maxv[rt] = w; if(l == r) return; int m = l + r >> 1; build(lson); build(rson);}int query(int v, int l, int r, int rt) { if(l == r) { maxv[rt] -= v; return l; } int m = l + r >> 1; int ret = maxv[rt << 1] >= v ? query(v, lson) : query(v, rson); push_up(rt); return ret;}int main() {#ifdef LOCAL freopen("in.txt", "r", stdin);// freopen("out.txt","w",stdout);#endif ios_base::sync_with_stdio(0); while(scanf("%d%d%d", &n, &w, &q) == 3) { if(n > q) n = q; build(root); while(q--) { int x; scanf("%d", &x); if(maxv[1] < x) puts("-1"); else printf("%d\n", query(x, root)); } } return 0;}
0 0
- HDU 2795 Billboard [线段树-单点更新]
- hdu 2795 Billboard 线段树 单点更新
- HDU 2795 Billboard / 线段树单点更新
- HDU-2795 Billboard 线段树单点更新
- hdu 2795 Billboard 线段树 单点更新
- hdu 2795 Billboard (线段树,单点更新)
- HDU-2795-Billboard-线段树单点更新
- HDU 2795 Billboard // 线段树 单点更新
- HDU 2795 Billboard 线段树单点更新
- HDU 2795 Billboard 线段树单点更新
- HDU 2795 Billboard (线段树单点更新)
- HDU 2795 Billboard (线段树单点更新)
- hdu 2795 Billboard(线段树-单点更新)
- HDU 2795 Billboard (线段树单点更新)
- hdu 2795 Billboard(线段树单点更新)
- hdu 2795 Billboard(线段树单点更新)
- HDU 2795 Billboard(线段树单点更新)
- hdu 2795 Billboard(线段树 单点更新)
- 面向对象传值和关键字this的秘密
- Java构造方法小例子
- hdu5446 Unknown Treasure(Lucas+中国剩余定理)
- mysql判断一个字符串是否包含某子串 【转】
- 9【18】
- HDU 2795 Billboard(线段树单点更新)
- HTML 元素位置的设置
- Java接口问题
- struts 技巧运用
- JQuery中$(function(){})和$(document).ready(function(){})
- js 无法删除cookie的问题
- 第一个java程序:错误: 编码GBK的不可映射字符
- Windows下如何构建和发布Python模块
- eclipse 无法链接手机