Hdu 2795 Billboard 单点更新,区间最值
来源:互联网 发布:老电视如何看网络电视 编辑:程序博客网 时间:2024/06/07 04:03
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795
题目大意:给你w*h的张贴板,现在给你N个高为1长为xi的海报,海报只能横着贴且不允许重叠,问第i张海报能否贴上,如过能则输出最上面能贴在第几行。
解题思路:将张贴板的每行长度看做一个大小为w的数字,每次贴进去一张海报,长度减去xi,节点中保存能张贴的最长的海报长度。
代码如下:
#include<stdio.h>#include<algorithm>#include<cstring>using namespace std;#define N 200005#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1int Max[N<<2],h,w,n;void pushup(int rt){ Max[rt]=max(Max[rt<<1],Max[rt<<1|1]);}void build(int l,int r,int rt){ Max[rt]=w; if(l==r) return; int m=(l+r)>>1; build(lson); build(rson); pushup(rt);}int query(int x,int l,int r,int rt){ if(l==r) { Max[rt]-=x; return l; } int m=(l+r)>>1; int ret; ret=Max[rt<<1]>=x?query(x,lson):query(x,rson); pushup(rt); return ret;}int main(){ while(~scanf("%d%d%d",&h,&w,&n)) { int x; if(h>n) h=n; build(1,h,1); for(int i=1;i<=n;i++) { scanf("%d",&x); if(x>Max[1]) printf("-1\n"); else printf("%d\n",query(x,1,h,1)); } } return 0;}
0 0
- Hdu 2795 Billboard 单点更新,区间最值
- HDOJ 2795 Billboard(单点更新+区间最值)
- hdu 2795 Billboard(线段树之 单点更新+区间最值)
- HDU 2795 Billboard(线段树区间最值查询和单点更新)
- HDU 2795 单点更新 + 区间最值
- HDOJ-2795 Billboard [线段树][单点更新+单点查询+维护区间最值]
- HUD.2795 Billboard ( 线段树 区间最值 单点更新 单点查询 建树技巧)
- hdu2795 Billboard 线段树单点更新区间最值
- HDU 2795 Billboard (线段树 单点更新 区间求最大值)
- 线段树 单点更新查询 区间最大值 hdu 2795 Billboard
- HDU 2795 Billboard 线段树,区间最大值,单点更新
- HDOJ 2795 - Billboard 线段树单点更新找区间最值
- hdu 2795 Billboard(单点更新)
- HDU 2795 Billboard [线段树-单点更新]
- hdu 2795 Billboard 线段树 单点更新
- HDU 2795 Billboard / 线段树单点更新
- HDU-2795 Billboard 线段树单点更新
- hdu 2795 Billboard 线段树 单点更新
- jQuery学习笔记之十一------动画效果
- Artificial Neural Networks && FileStorage of OpenCV
- String.format函数使用方法介绍
- 【序列化】小结,逐步完善中
- Unity3D项目程序加密1——在Unity3D里使用自己的dll
- Hdu 2795 Billboard 单点更新,区间最值
- Linux makefile 教程 非常详细
- kvm下安装windows
- 由性能优化引起的活锁现象
- GetProcAddressEx跨进程获取导出函数地址
- js visibility和display区别(附代码实例)
- [android基础知识] 之八:线程的使用之Handler
- JNDI的一篇文章
- leetcode做题总结,题目Search for a Range 2012/03/02