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;
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

hdu 2795 段树--点更新相关推荐

  1. HDU 6356.Glad You Came-线段树(区间更新+剪枝) (2018 Multi-University Training Contest 5 1007)...

    6356.Glad You Came 题意就是给你一个随机生成函数,然后从随机函数里确定查询的左右区间以及要更新的val值.然后最后求一下异或和就可以了. 线段树,区间最大值和最小值维护一下,因为数据 ...

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

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

  3. hdu 3954(线段树区间更新)

    转载标记处:http://www.cnblogs.com/wang-jue/articles/2920341.html 思路:这道题所得到的经验与每个英雄的等级有关,一般的可能就用线段树一直更新到每一 ...

  4. hdu 1698(线段树区间更新)

    解题思路:线段树区间更新水题. #include<iostream> #include<cstdio> #include<cstring> using namesp ...

  5. ACM-线段树区间更新+离散化

    区间更新与单点更新最大的不同就在于Lazy思想: http://blog.sina.com.cn/s/blog_a2dce6b30101l8bi.html 可以看这篇文章,讲得比较清楚 在具体使用上, ...

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

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

  7. hdu4521 小明系列的问题——小明序列(LIS变种 (段树+单点更新解决方案))

    链接: huangjing 题目:中文题目 思路: 1:这个题目假设去掉那个距离大于d的条件,那么必定是一个普通的LIS.可是加上那个条件后就变得复杂了.我用的线段树的解法. . .就是採用延迟更新的 ...

  8. HDU-5172-GTY's gay friends-线段树单点更新

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5172 题意:给出n个数,m个询问,问你[l,r]区间内是否为1到r-l+1的全排列. 大小很容易我们通 ...

  9. hdu-4302-Holedox Eating-线段树-单点更新,有策略的单点查询

    一開始实在是不知道怎么做,后来经过指导,猛然发现,仅仅须要记录某个区间内是否有值就可以. flag[i]:代表i区间内,共同拥有的蛋糕数量. 放置蛋糕的时候非常好操作,单点更新. ip:老鼠当前的位置 ...

最新文章

  1. SpringMVC通过注解方式读取properties文件中的值
  2. linux编程-open函数和write函数实现copy命令
  3. 使用Java客户端操作elasticsearch--设置mappings、添加文档、查询数据
  4. php编译安装与配置
  5. 服务器区分几位系统吗,怎么区分服务器是几个CPU,几核
  6. [Code Snipper]图片轮换
  7. C语言显示USDOS汉字库
  8. html5.0用什么编程语言,HTML5.0,求好心人详解,谢谢
  9. linux 邮件文件名 病毒,文件型File/Macro病毒的捕获
  10. 如何自学通过PMP?
  11. javah 找不到类文件的解决办法
  12. c语言汉字utf8,C语言汉字gbk转utf-8
  13. itext7 java转pdf添加图片
  14. xshell生成xsh文件路径
  15. 信号(signal,kill,raise)
  16. Tekton 与 Argo CD 结合实现 GitOps
  17. 【STM32F429的DSP教程】第2章 Matlab R2018a的安装
  18. vue-cli 创建项目不成功 原因为项目文件夹无node_modules文件 进行npm install不成功解决办法
  19. 基于SpringBoot2的房屋租赁系统的设计与实现-计算机、软件工程、网络工程等专业毕设
  20. 名气大增的小红书还需要提防些什么

热门文章

  1. 网页学名为html文件,什么是HTML
  2. 函数的凹凸性证明_判断复杂函数的凹凸性
  3. 哪个工具编译java_用什么工具来编译JAVA啊?
  4. linux那个11命令是什么意思,11个有用的Linux命令
  5. SpringBoot复习:2(@Configuration注解)
  6. 如何用计算机求锐角三角比,9.3用计算器求锐角三角比教学案
  7. python怎么查看代码错误_python中的错误如何查看
  8. 小程序云开发 一开通云开发,给数据库添加一条记录
  9. 01-CoreData 概述
  10. 拜托,面试别再问我时间复杂度了!!!