hdu 2795 线段树应用 单结点更新
来源:互联网 发布:虚拟现实 大数据 编辑:程序博客网 时间:2024/06/03 21:13
题意:给一个h*w的公告栏,另有n条广告,它们是一个1*wi的矩形,按照输入的顺序,从左到右,从上到下,贴在公告栏,问它能贴在第几行,如果不能,输出-1.
思路:线段树应用:每个结点l,r代表高度(h)区间,val代表这个区间最大宽度。
#include<cstdio>#include<cstring>#define Max(a,b) (a)>(b)?(a):(b)using namespace std;const int maxn = 2*(1e5+1);struct segtree{int l,r;int val;// 代表这个区间宽度的最大值 }segnode[4*maxn];void build(int root,int start,int end,int w){segnode[root].l=start;segnode[root].r=end;segnode[root].val=w;if(start==end)return;int mid=(start+end)/2;build(2*root,start,mid,w);build(2*root+1,mid+1,end,w);}void Update(int root,int w){if(segnode[root].l==segnode[root].r){if(segnode[root].val>=w){segnode[root].val-=w;printf("%d\n",segnode[root].l);return;}}if(w<=segnode[root*2].val)Update(root*2,w);elseUpdate(root*2+1,w);segnode[root].val=Max(segnode[root*2].val,segnode[root*2+1].val);}int main(){int h,w,n;//freopen("in.txt","r",stdin);while(~scanf("%d%d%d",&h,&w,&n)){if(h>=n)h=n;build(1,1,h,w);for(int t=0;t<n;t++){int wi;scanf("%d",&wi);if(wi>segnode[1].val)printf("-1\n");elseUpdate(1,wi);}}}
阅读全文
0 0
- hdu 2795 线段树应用 单结点更新
- 线段树维护区间和模板(单结点更新)(1166)
- 线段树维护区间最大模板(单结点更新)(1754)
- hdu 1166 (线段树单节点更新,区间和)
- HDU 1166-敌兵布阵(线段树单节点更新)
- HDU 3308【线段树-query:区间最长单调上升序列,update:结点更新,区间合并】
- 线段树单节点更新
- hdu 2795(线段树更新单个节点)
- HDU 2795 Billboard [线段树-单点更新]
- hdu 2795 Billboard 线段树 单点更新
- HDU 2795 Billboard / 线段树单点更新
- HDU-2795 Billboard 线段树单点更新
- hdu 2795 Billboard 线段树 单点更新
- hdu 2795 线段树--点更新
- 线段树单点更新 HDU 2795
- hdu 2795 线段树,区间更新求补值
- hdu 2795 Billboard (线段树,单点更新)
- hdu 2795 Billboard 线段树 点更新
- SVN版本控制软件
- 前端代码异常日志收集与监控
- 自动化测试时遇到的脚本录制问题及解决方法
- poj 1635 dfs
- TLS_笔记
- hdu 2795 线段树应用 单结点更新
- Java之数据类型转换
- 二十八、UI-Grid Grouping 分组
- Linux脚本功略学习笔记15
- 视频图像去噪的一些理解
- stm32f030c8t6 定时adc采集 串口发出
- 文本挖掘之特征选择_python
- 免费UML建模工具尽情体验
- javascript深入理解js闭包