HDU 2795 Billboard(线段树)
来源:互联网 发布:阿里云 oss sdk 编辑:程序博客网 时间:2024/06/05 03:23
题意:中文题
思路:建立一颗线段树,线段树维护的每个元素代表广告牌的一行的当前剩余最大空间。
最多只有n(n<=20W)个公共,且一条公共如果连一整行都放不下(即wi>w),直接输出-1即可。所以我们线段树最多只需要维护20W个元素。就算h有10亿,后面那些行根本是浪费。在输入的时候取最小就好了。
现在我们依次读入wi,找到能放下wi的序号最小的线段树叶节点,然后更新线段树即可。这个查询过程我们可以写query函数来查询。
其中线段树中节点维护的信息是:本节点控制的区间[L,R]内的叶节点的最大剩余空间maxv[i]。如果maxv[i]>wi说明这个节点的子树有叶子能放下wi,优先往左子树找即可.
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn = 200000+5;const int INF = 1e9;//线段树需要维护的信息int sum[maxn*4];#define lson i*2,l,m#define rson i*2+1,m+1,r//i结点收集子结点的统计结果 void PushUp(int i){sum[i]=max(sum[i*2],sum[i*2+1]); }//递归建立线段树void build(int i,int l,int r,int w){sum[i]=w;if (l==r){ return;}int m = (l+r)/2;build(lson,w);build(rson,w);PushUp(i); //收集子结点的结果}int query(int i,int l,int r,int u){//目的区间包含当前区间if (l==r){sum[i]-=u;return l;}int m = (l+r)/2;int ans = (sum[i*2]>=u)?query(lson,u):query(rson,u); //优先左子树 PushUp(i);return ans;}int main(){int cas = 1;int n,h,w,N;while (scanf("%d%d%d",&h,&w,&N)!=EOF){ n = min(h,N); //确定维护的点数build(1,1,n,w);while (N--){int x;scanf("%d",&x);if (sum[1]<x)printf("-1\n");elseprintf("%d\n",query(1,1,n,x));}}}
0 0
- hdu 2795 Billboard(线段树)
- hdu - 2795 - Billboard(线段树)
- hdu 2795 Billboard(线段树)
- [ACM] 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 (线段树+想法)
- thinkpad T450 20BVA01MCD拆机换内存条的经验分享
- 购物车的动画效果,这么简单的逻辑
- WebLogic忘记密码解决方法
- 机器视觉开源处理库汇总
- RFC 3550 中文版
- HDU 2795 Billboard(线段树)
- ubuntu 14.04 LTS error: insufficient permissions for device(设备权限不足)
- org.hibernate.AssertionFailure: null id in com.base.program.entity.Program entry (don't flush the S
- 远程控制一二三
- yum 和rpm的区别
- 磁力传感器工作原理
- 局域网机器中如何访问VMware内的虚拟机
- Add Two Nums
- runtime 类和对象的使用和基本的数据结构