hdu 2795 线段树--点更新
来源:互联网 发布:手机淘宝下载安装 编辑:程序博客网 时间:2024/06/06 01:32
http://acm.hdu.edu.cn/showproblem.php?pid=2795
多校的第一场和第三场都出现了线段树,比赛期间没做,,这两天先做几道热身下,然后31号之前把那两道多校的线段树都搞了,这是一道热身题
关键是建模:
首先一定看清楚题目构造的场景,看有什么特点--------会发现,如果尽量往左上放置的话,那么由于 the i-th announcement is a rectangle of size 1 * wi.,完全可以对h建立线段树,表示一行,结点里的l,r就表示从l行到r行,每次插入都更新结点里的可用宽度,同时插入的时候记录行数就行
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define lson(i) (i)*2,l,mid#define rson(i) ((i)*2+1),mid+1,r#define ll rt*2#define rr (rt*2+1)const int MAXN = 200000 +10;int n,w,h;struct Node{ int l,r; int up;}nodes[MAXN*4];void build(int rt, int l, int r){ nodes[rt].l=l; nodes[rt].r=r; nodes[rt].up=w; if(l == r)return; int mid=(l+r)/2; build(lson(rt)); build(rson(rt));}int cnt;int ans[MAXN];void update(int rt,int v){ if(nodes[rt].l == nodes[rt].r) { nodes[rt].up-=v; ans[cnt]=nodes[rt].l ; return; } if(v<=nodes[rt*2].up)update(rt*2,v); else update(rt*2+1,v); nodes[rt].up=max(nodes[rt*2].up, nodes[rt*2+1].up);}int main(){ int y; while(~scanf("%d%d%d",&h, &w, &n)) { cnt=0; h=min(h,n); build(1,1,h); memset(ans,-1,sizeof(ans)); for(int i=0;i<n;i++) { scanf("%d",&y); if(nodes[1].up>=y)update(1,y); cnt++; } for(int i=0;i<n;i++) printf("%d\n",ans[i]); } return 0;}
0 0
- hdu 2795 线段树--点更新
- hdu 2795 Billboard 线段树 点更新
- HDU 2795 Billboard(线段树点更新)
- HDU 2795 Billboard 线段树 顺序点更新
- HDU-2795-Billboard(线段树 点更新求最值)
- hdu 1823 二维线段树点更新
- hdu 4819 二维线段树点更新
- HDU 1166 线段树(点更新)
- 线段树 点更新
- HDU 1166 点更新段查询线段树
- HDU 1754 点更新段查询最大值线段树
- HDU 1166 敌兵布阵(线段树:点更新,区间求和)
- hdu 1166 第一道线段树,点更新
- hdu 1166 敌兵布阵 线段树 点更新
- hdu 1394 Minimum Inversion Number 线段树 点更新
- HDU 1166 敌兵布阵 线段树 部分和 点更新
- HDU 1754 I Hate It 线段树 最大值 点更新
- HDU 1166----敌兵布阵(线段树点更新)
- Hiberante 4.5.1 配置遇到的困难
- 数据结构中链表元素的删除
- 大端小端格式详解
- 452A - Eevee 模拟字符串,挺简单的一道题
- Metasploit2: tcp port 111 – rpcbind
- hdu 2795 线段树--点更新
- 请确保此文件可访问并且是一个有效的程序集或COM组件
- 定:定时执行下面的代码 20140729
- c++公用体union、结构体struct内存分配问题
- Java平台扩展机制#2:Services
- 面向程序员的设计模式 ——GoF《设计模式》读书总结(零)
- cluster-overview
- ACM
- 救基友记3——三维数组记录BFS