HDU_2795_线段树
来源:互联网 发布:ppt软件下载 编辑:程序博客网 时间:2024/05/16 18:44
题意:h*w的广告牌,每次放一个1*a的广告,且最先放到最上边。线段树的简单题区间查找最大值的位置然后放进去,更新放进后的信息:
#include <cstdio>#include <cstring>using namespace std;const int N = 200000 << 2;int n, h, w;int Max[N];int MAX(int a, int b){ return a>b ? a : b;}void build(int l, int r, int rt){ Max[rt] = w; if(l == r) return ; int m = (l+r) >> 1, rtt = rt << 1; build(l, m, rtt); build(m+1, r, rtt+1);}int query(int x, int l, int r, int rt){ if(l == r) { Max[rt] -= x; return l; } int m = (l+r) >> 1, rtt = rt << 1; int ret = (Max[rtt]<x) ? query(x, m+1, r, rtt+1) : query(x, l, m, rtt); Max[rt] = MAX(Max[rtt], Max[rtt+1]); return ret;}int main(){ int a; while(~scanf("%d%d%d", &h, &w, &n)) { memset(Max, 0, sizeof(Max)); if(h>n) h=n; build(1, h, 1); for(int i=0; i<n; ++i) { scanf("%d", &a); if(Max[1] < a) printf("-1\n"); else printf("%d\n", query(a, 1, h, 1)); } } return 0;}其它线段树水题:
HDU1754单点替换题解:Here
HDU1166区间最值题解:Here
HDU1394最小逆序数题解:Here
0 0
- HDU_2795_线段树
- hdu_2795_线段树好题
- hdu_2795_线段树入门_线段树由树状数组转坑原本数组模拟
- 线段树?线段树!
- 线段树?线段树!
- 线段_线段树
- 线段_线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- C++ 编译期与运行期
- ORACLE-基础六(TABLESPACE AND DataFiles)
- 【BZOJ 1880】 [Sdoi2009]Elaxia的路线
- linux centos redhat suse系统 移动 复制 删除 mv cp rm
- UML类图关系
- HDU_2795_线段树
- 深入探索透视投影变换,齐次坐标
- 对Redis的理解总结
- 细数那些互联网公司名字的来历
- System Design with SystemC 的学习笔记
- 让你的软件飞起来:RGB转为YUV
- 第一次写博客,记录一下。
- 如何确定一家培训机构值得信赖
- Linux笔记(二)-系统安装