hdu 2795(线段树)
解题思路:这道题很难想到是用线段树,确实转化的很巧妙
实际上,我们只需要利用线段树(记录1-h)维护哪个位置的剩余空间最大即可,即1,2,......,h是线段树的叶子节点,我们每次要找的就是叶子节点的剩余空间的最大值,只要能够想到这里就很容易啦。。另外如果h>n的话,就令h=n,否则就是类似于位置多而要贴上去的砖少,这样就不合题目意思了。。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;const int maxn = 200005;
struct seg
{int l,r,value,id;
}tree[maxn<<2];
int h,w,n;void build(int l,int r,int u)
{tree[u].l = l;tree[u].r = r;tree[u].value = w;tree[u].id = l;if(l == r) return;int mid = (l + r) >> 1;build(l,mid,2*u);build(mid+1,r,2*u+1);
}void update(int l,int r,int v,int u)
{if(tree[u].l >= l && tree[u].r <= r){tree[u].value -= v;return;}int mid = (tree[u].l + tree[u].r) >> 1;if(l <= mid) update(l,r,v,2*u);if(r > mid) update(l,r,v,2*u+1);if(tree[2*u].value >= tree[2*u+1].value){tree[u].value = tree[2*u].value;tree[u].id = tree[2*u].id;}else{tree[u].value = tree[2*u+1].value;tree[u].id = tree[2*u+1].id;}
}int query(int v,int u)
{if(tree[u].value < v) return -1;if(tree[u].l == tree[u].r) return tree[u].id;if(tree[2*u].value >= v) return query(v,2*u);else return query(v,2*u+1);
}int main()
{int x;while(scanf("%d%d%d",&h,&w,&n)!=EOF){if(h > n) h = n;build(1,h,1);for(int i = 1; i <= n; i++){scanf("%d",&x);int tmp = query(x,1);if(tmp != -1){printf("%d\n",tmp);update(tmp,tmp,x,1);}else printf("-1\n");}}return 0;
}
hdu 2795(线段树)相关推荐
- POJ 2777 ZOJ 1610 HDU 1698 --线段树--区间更新
直接将这3题 放一起了 今天在做线段树的东西 这3个都是区间更新的 查询方式互相不同 反正都可以放到一起吧 直接先上链接了 touch me touch me touch me 关于涉及到区间的修改 ...
- hdu 2795 段树--点更新
http://acm.hdu.edu.cn/showproblem.php?pid=2795 在第一和第三多学校都出现线段树,我在比赛中并没有这样做.,热身下,然后31号之前把那两道多校的线段树都搞了 ...
- hdu 5367(线段树+区间合并)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5367 官方题解: 对于求"高山脉"长度,可以利用线段树.树节点中保存左高度连续长度 ...
- hdu 5266(线段树+LCA)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5266 解题思路: 考虑dfs序,通过在简单的证明可知L~R的LCA为L ~R 中dfs序较小的那个位置 ...
- hdu 5124(线段树区间更新+lazy思想)
http://acm.hdu.edu.cn/showproblem.php?pid=5124 题意:区间覆盖次数问题. 解题思路:线段树水之. #include<iostream> #in ...
- HDU - 4578Transformation——线段树+区间加法修改+区间乘法修改+区间置数+区间和查询+区间平方和查询+区间立方和查询
[题目描述] HDU - 4578Transformation Problem Description Yuanfang is puzzled with the question below: The ...
- poj 2777 AND hdu 5316 线段树
区间染色问题,用线段树可以解决.颜色总类不多,故考虑用二进制数的每一位表示一种颜色,然后父节点的颜色就是孩子节点颜色"或"起来,加上lazy标记,轻松AC. poj 2777: 1 ...
- HDU 5238 线段树+数论
原题:http://acm.hdu.edu.cn/showproblem.php?pid=5238. 题解:给你长度为n的操作序列,和m组操作求每组操作的模29393的值.这道题直接显然是没有前途的, ...
- poj 2528 离散化+线段树 hdu 1698 线段树 线段树题目类型一:染色计数 外加离散化
第一次听到离散化是今年省赛的时候,一道矩形并的题,很水,就两个矩形... 今天再去做线段树已经发现离散化忘得差不多了...水逼的悲哀啊... 先看简单点的hdu 1698 http://acm.hdu ...
最新文章
- python opencv图片编码为h264文件
- hdu 2842 Chinese Rings 矩阵快速幂
- [SHOI2008]小约翰的游戏
- 【CodeForces 577C】Vasya and Petya’s Game
- 论文浅尝 | Leveraging Knowledge Bases in LSTMs
- java检查变量是否定义_JavaScript检查变量是否存在(已定义/初始化)
- pythonjson安装_python安装simplejson
- 高清晰卫星图片:东京、法兰克福机场、华盛顿机场、金字塔、凯旋门
- 主题:讲解三层代码讲解(ActiveList的Action的工作方式)--第五课(*****) DATE:2004-06-03...
- java实现短信验证码发送功能
- logo免费设计app有哪些?好用的logo设计app分享
- Eclipse错误: 找不到或无法加载主类或项目无法编译10种解决大法!
- 京东VS淘宝:待付款订单-再次支付方案对比
- 阿朱访谈:程序员转型期职业选择,是继续做技术高手还...(转)
- 【Cartopy】1.库的安装和使用
- 2022年双十一蓝牙耳机选哪款?便宜音质好的蓝牙耳机推荐
- 你也可以是天才,心有多大,舞台就有多大
- 程序员体验AI换脸就不要用ZAO了,详解Github周冠军项目Faceswap的变脸攻略
- Photoshop如何改变背景底色并调整照片尺寸和图像大小
- 创作者基金 11 月亮点