HDU2795Billboard (线段树)
来源:互联网 发布:lvs mysql负载均衡 编辑:程序博客网 时间:2024/05/02 07:45
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795
题意:有一块尺寸为h*w的矩形长板,要在上面贴1*wi的海报n张,选择贴海报的位置是:尽量高,同一高度,选择尽量靠左的地方。要求输出每张海报的高度位置。
一句话题解:用最底层的单个结点(也就是当tree[i].l==tree[i].r时的点)来表示高度的.......
#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>using namespace std;const int maxn = 200005;struct Seg{ int l, r, w;}tree[maxn<<2];int h, w, n;void build(int left, int right, int rt){ int mid = (left + right) >> 1; tree[rt].l = left; tree[rt].r = right; tree[rt].w = w; if(left == right) return ; build(left, mid, rt<<1); build(mid+1, right, rt<<1|1);}int query(int x, int rt){ if(tree[rt].l == tree[rt].r) { tree[rt].w -= x; return tree[rt].l; } int res = (tree[rt<<1].w >= x ? query(x, rt<<1) : query(x, rt<<1|1)); tree[rt].w = max(tree[rt<<1].w, tree[rt<<1|1].w); return res;}int main(){ while(scanf("%d%d%d", &h, &w, &n) != EOF) { if(h > n) h = n; build(1, h, 1); while(n--) { int x; scanf("%d", &x); if(tree[1].w < x) printf("-1\n"); else printf("%d\n", query(x, 1)); } } return 0;}
0 0
- hdu2795Billboard(线段树)
- HDU2795Billboard (线段树)
- 线段树-HDU2795Billboard
- hdu2795Billboard 线段树
- hdu2795Billboard【线段树】
- hdu2795Billboard(线段树)
- HDU2795Billboard--线段树单点更新
- hdu2795Billboard (线段树,看作点更新)
- hdu2795Billboard(线段树,找第一个大于w的点)
- HDU2795Billboard
- hdu2795Billboard
- hdu2795Billboard
- hdu2795Billboard
- hdu2795Billboard
- HDU2795Billboard
- 初识线段树(线段树总结)
- codevs1080线段树练习(线段树)
- poj2777-线段树应用(线段覆盖)
- 如何安全的存储用户的密码
- adb 出现insufficient permissions for device" 的解决方法
- 数据结构之串的模式匹配算法(KMP)
- 二维数组中查找问题
- 012
- HDU2795Billboard (线段树)
- protractor自动化测试定位页面元素
- 搜索引擎lucene
- Python——format
- POI解析excel之----经典导入
- 013
- WebUI.Bootstrap
- 千里之行系列(4)一 添加登陆界面及数据库支持
- 二进制-转换结构