解题思路:这道题很难想到是用线段树,确实转化的很巧妙

实际上,我们只需要利用线段树(记录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(线段树)相关推荐

  1. POJ 2777 ZOJ 1610 HDU 1698 --线段树--区间更新

    直接将这3题 放一起了  今天在做线段树的东西 这3个都是区间更新的 查询方式互相不同 反正都可以放到一起吧 直接先上链接了 touch me touch me touch me 关于涉及到区间的修改 ...

  2. hdu 2795 段树--点更新

    http://acm.hdu.edu.cn/showproblem.php?pid=2795 在第一和第三多学校都出现线段树,我在比赛中并没有这样做.,热身下,然后31号之前把那两道多校的线段树都搞了 ...

  3. hdu 5367(线段树+区间合并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5367 官方题解: 对于求"高山脉"长度,可以利用线段树.树节点中保存左高度连续长度 ...

  4. hdu 5266(线段树+LCA)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5266 解题思路: 考虑dfs序,通过在简单的证明可知L~R的LCA为L ~R 中dfs序较小的那个位置 ...

  5. hdu 5124(线段树区间更新+lazy思想)

    http://acm.hdu.edu.cn/showproblem.php?pid=5124 题意:区间覆盖次数问题. 解题思路:线段树水之. #include<iostream> #in ...

  6. HDU - 4578Transformation——线段树+区间加法修改+区间乘法修改+区间置数+区间和查询+区间平方和查询+区间立方和查询

    [题目描述] HDU - 4578Transformation Problem Description Yuanfang is puzzled with the question below: The ...

  7. poj 2777 AND hdu 5316 线段树

    区间染色问题,用线段树可以解决.颜色总类不多,故考虑用二进制数的每一位表示一种颜色,然后父节点的颜色就是孩子节点颜色"或"起来,加上lazy标记,轻松AC. poj 2777: 1 ...

  8. HDU 5238 线段树+数论

    原题:http://acm.hdu.edu.cn/showproblem.php?pid=5238. 题解:给你长度为n的操作序列,和m组操作求每组操作的模29393的值.这道题直接显然是没有前途的, ...

  9. poj 2528 离散化+线段树 hdu 1698 线段树 线段树题目类型一:染色计数 外加离散化

    第一次听到离散化是今年省赛的时候,一道矩形并的题,很水,就两个矩形... 今天再去做线段树已经发现离散化忘得差不多了...水逼的悲哀啊... 先看简单点的hdu 1698 http://acm.hdu ...

最新文章

  1. python opencv图片编码为h264文件
  2. hdu 2842 Chinese Rings 矩阵快速幂
  3. [SHOI2008]小约翰的游戏
  4. 【CodeForces 577C】Vasya and Petya’s Game
  5. 论文浅尝 | Leveraging Knowledge Bases in LSTMs
  6. java检查变量是否定义_JavaScript检查变量是否存在(已定义/初始化)
  7. pythonjson安装_python安装simplejson
  8. 高清晰卫星图片:东京、法兰克福机场、华盛顿机场、金字塔、凯旋门
  9. 主题:讲解三层代码讲解(ActiveList的Action的工作方式)--第五课(*****) DATE:2004-06-03...
  10. java实现短信验证码发送功能
  11. logo免费设计app有哪些?好用的logo设计app分享
  12. Eclipse错误: 找不到或无法加载主类或项目无法编译10种解决大法!
  13. 京东VS淘宝:待付款订单-再次支付方案对比
  14. 阿朱访谈:程序员转型期职业选择,是继续做技术高手还...(转)
  15. 【Cartopy】1.库的安装和使用
  16. 2022年双十一蓝牙耳机选哪款?便宜音质好的蓝牙耳机推荐
  17. 你也可以是天才,心有多大,舞台就有多大
  18. 程序员体验AI换脸就不要用ZAO了,详解Github周冠军项目Faceswap的变脸攻略
  19. Photoshop如何改变背景底色并调整照片尺寸和图像大小
  20. 创作者基金 11 月亮点

热门文章

  1. 神策“营销云·微信生态”全面开放,限时免费申请通道开启!
  2. 【CEO赠书】《浪潮之巅》:计算机史上的人间词话
  3. Bootstrap link 引入3文件
  4. 慕课网Spark SQL日志分析 - 4.从Hive平滑过渡到Spark SQL
  5. Monkey测试简介
  6. 为什么在定义hashcode时要使用31这个数呢
  7. Android项目导出jar包的小技巧
  8. highcharts纵坐标的格式化
  9. 常见HTTP状态(304,200等)
  10. WM_NCPAINT消息