hdu 2795 Billboard(线段树)
2015-08-22 13:56
435 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795
题目大意:有一块宽w,高h的通知板,现在要在 上面贴通知,通知为宽wi,高1,通知要尽量靠上在靠上的前提下靠左,问每张通知贴在那一行。
用线段树存取区间所能贴的海报的最大宽度。然后查询,如果左区间的海报可以贴下,就搜索左边,不行就搜索右边。
然后找到位置贴上海报,更新区间。
注意segTree[1] < x是无解的情况,另外区间最大值是h和n的最小值,假如h小,最多贴到h行,假如n小,海报始终靠上,就算一行一张也最多只有n张。
题目大意:有一块宽w,高h的通知板,现在要在 上面贴通知,通知为宽wi,高1,通知要尽量靠上在靠上的前提下靠左,问每张通知贴在那一行。
用线段树存取区间所能贴的海报的最大宽度。然后查询,如果左区间的海报可以贴下,就搜索左边,不行就搜索右边。
然后找到位置贴上海报,更新区间。
注意segTree[1] < x是无解的情况,另外区间最大值是h和n的最小值,假如h小,最多贴到h行,假如n小,海报始终靠上,就算一行一张也最多只有n张。
#include<iostream> #include<cstring> #include<cmath> #include<cstdio> #include<algorithm> #include <queue> using namespace std; const int maxn = 200005; const int oo = 0xfffffff; #define L_CHILD rt<<1, begin, mid #define R_CHILD rt<<1|1, mid + 1, end int segTree[maxn<<2]; int x; int h, w, n; void pushUp(int rt) { segTree[rt] = max(segTree[rt<<1], segTree[rt<<1|1]); } void build(int rt, int begin, int end) { segTree[rt] = w; if(begin == end) { return ; } int mid = begin + end >> 1; build(L_CHILD); build(R_CHILD); } int query(int rt, int begin, int end, int x) { if(begin == end) { segTree[rt] -= x; return begin; } int mid = begin + end >> 1; int res = 0; if(segTree[rt<<1] >= x) { res = query(L_CHILD, x); } else { res = query(R_CHILD, x); } pushUp(rt); return res; } int main() { while (scanf("%d%d%d", &h, &w, &n) != EOF) { h = min(h, n); build(1, 1, h); for (int i = 0; i < n; i ++) { scanf("%d", &x); if(segTree[1] < x) { printf("-1\n"); } else { printf("%d\n", query(1, 1, h, x)); } } } return 0; }
相关文章推荐
- POJ 1065 Wooden Sticks
- 字符串匹配:KMP算法, Boyer-Moore算法理解与总结
- hdu 4294 第一发SAP
- 抽象类详解
- Good Bye 2014 B. New Year Permutation 并查集 最短路 floyed算法
- mhVTL的安装与应用
- C++内存分配一:C++程序内存的基本组成
- Python 日期处理——datetime包学习(上)
- [译] C track: compiling C programs.
- 《STL源代码分析》---stl_stack.h读书笔记
- MongoDB查询简单语法
- 启动和停止MySQL服务
- 提高PHP编程效率的20个要点(转)
- CSS的table的实现,实现表格的单行边框显示,换行显示效果
- hdu2897 巴什博奕
- uva 11235 Frequent values RMQ问题
- codecombat之KithGard地牢1-18关代码分享
- Dubbo框架——基础用例
- 自适应布局
- 条件编译 #ifndef、#def、#endif 等宏的意义及其用法