hdu 2795 段树--点更新
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 段树--点更新相关推荐
- HDU 6356.Glad You Came-线段树(区间更新+剪枝) (2018 Multi-University Training Contest 5 1007)...
6356.Glad You Came 题意就是给你一个随机生成函数,然后从随机函数里确定查询的左右区间以及要更新的val值.然后最后求一下异或和就可以了. 线段树,区间最大值和最小值维护一下,因为数据 ...
- POJ 2777 ZOJ 1610 HDU 1698 --线段树--区间更新
直接将这3题 放一起了 今天在做线段树的东西 这3个都是区间更新的 查询方式互相不同 反正都可以放到一起吧 直接先上链接了 touch me touch me touch me 关于涉及到区间的修改 ...
- hdu 3954(线段树区间更新)
转载标记处:http://www.cnblogs.com/wang-jue/articles/2920341.html 思路:这道题所得到的经验与每个英雄的等级有关,一般的可能就用线段树一直更新到每一 ...
- hdu 1698(线段树区间更新)
解题思路:线段树区间更新水题. #include<iostream> #include<cstdio> #include<cstring> using namesp ...
- ACM-线段树区间更新+离散化
区间更新与单点更新最大的不同就在于Lazy思想: http://blog.sina.com.cn/s/blog_a2dce6b30101l8bi.html 可以看这篇文章,讲得比较清楚 在具体使用上, ...
- hdu 5124(线段树区间更新+lazy思想)
http://acm.hdu.edu.cn/showproblem.php?pid=5124 题意:区间覆盖次数问题. 解题思路:线段树水之. #include<iostream> #in ...
- hdu4521 小明系列的问题——小明序列(LIS变种 (段树+单点更新解决方案))
链接: huangjing 题目:中文题目 思路: 1:这个题目假设去掉那个距离大于d的条件,那么必定是一个普通的LIS.可是加上那个条件后就变得复杂了.我用的线段树的解法. . .就是採用延迟更新的 ...
- HDU-5172-GTY's gay friends-线段树单点更新
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5172 题意:给出n个数,m个询问,问你[l,r]区间内是否为1到r-l+1的全排列. 大小很容易我们通 ...
- hdu-4302-Holedox Eating-线段树-单点更新,有策略的单点查询
一開始实在是不知道怎么做,后来经过指导,猛然发现,仅仅须要记录某个区间内是否有值就可以. flag[i]:代表i区间内,共同拥有的蛋糕数量. 放置蛋糕的时候非常好操作,单点更新. ip:老鼠当前的位置 ...
最新文章
- SpringMVC通过注解方式读取properties文件中的值
- linux编程-open函数和write函数实现copy命令
- 使用Java客户端操作elasticsearch--设置mappings、添加文档、查询数据
- php编译安装与配置
- 服务器区分几位系统吗,怎么区分服务器是几个CPU,几核
- [Code Snipper]图片轮换
- C语言显示USDOS汉字库
- html5.0用什么编程语言,HTML5.0,求好心人详解,谢谢
- linux 邮件文件名 病毒,文件型File/Macro病毒的捕获
- 如何自学通过PMP?
- javah 找不到类文件的解决办法
- c语言汉字utf8,C语言汉字gbk转utf-8
- itext7 java转pdf添加图片
- xshell生成xsh文件路径
- 信号(signal,kill,raise)
- Tekton 与 Argo CD 结合实现 GitOps
- 【STM32F429的DSP教程】第2章 Matlab R2018a的安装
- vue-cli 创建项目不成功 原因为项目文件夹无node_modules文件 进行npm install不成功解决办法
- 基于SpringBoot2的房屋租赁系统的设计与实现-计算机、软件工程、网络工程等专业毕设
- 名气大增的小红书还需要提防些什么
热门文章
- 网页学名为html文件,什么是HTML
- 函数的凹凸性证明_判断复杂函数的凹凸性
- 哪个工具编译java_用什么工具来编译JAVA啊?
- linux那个11命令是什么意思,11个有用的Linux命令
- SpringBoot复习:2(@Configuration注解)
- 如何用计算机求锐角三角比,9.3用计算器求锐角三角比教学案
- python怎么查看代码错误_python中的错误如何查看
- 小程序云开发 一开通云开发,给数据库添加一条记录
- 01-CoreData 概述
- 拜托,面试别再问我时间复杂度了!!!