hdu 2795(单点改动)
题意:有h×w大的公告板。有n条公告要写入,每条公告高度都是1,宽度是wi,每次从最上最左的空位写,假设有空位输出第几行。假设没有足够空位输出-1。
题解:注意h最大1e9。但事实上是看n的大小。由于假设有n条公告最多占n行,所以线段树最大是min(h,n)。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 200005;
int h, w, n, sum[N << 2];void pushup(int k) {sum[k] = max(sum[k * 2], sum[k * 2 + 1]);
}void build(int k, int left, int right) {if (left == right) {sum[k] = w;return;}int mid = (left + right) / 2;build(k * 2, left, mid);build(k * 2 + 1, mid + 1, right);pushup(k);
}int query(int k, int left, int right, int x) {if (left == right) {sum[k] -= x;return left;}int mid = (left + right) / 2, res = -1;if (sum[k * 2] >= x)res = query(k * 2, left, mid, x);else if (sum[k * 2 + 1] >= x)res = query(k * 2 + 1, mid + 1, right, x);pushup(k);return res;
}int main() {while (scanf("%d%d%d", &h, &w, &n) == 3) {int temp = h < n ? h : n;build(1, 1, temp);int x;for (int i = 0; i < n; i++) {scanf("%d", &x);if (x > w || sum[1] < x)printf("-1\n");elseprintf("%d\n", query(1, 1, temp, x));}}return 0;
}
转载于:https://www.cnblogs.com/mthoutai/p/7203818.html
hdu 2795(单点改动)相关推荐
- HDU 2795 Billboard (线段树+贪心)
HDU 2795 Billboard (线段树+贪心) 手动博客搬家:本文发表于20170822 21:30:17, 原地址https://blog.csdn.net/suncongbo/articl ...
- 线段树——思维(Codeforces 339D Xenia and Bit Operations/Billboard HDU - 2795)
Codeforces 339D Xenia and Bit Operations vj地址 题意:给出2的n次方个数,每次将现在这个序列中相邻的两个数运算后合并为一个数,得到一个新的序列,这个新序列的 ...
- 线段数单点更新——HDU 2795
对应HDU题目:点击打开链接 Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- hdu 2795 公告板 (单点最值)
题意:有个公告板,大小为h*w,要贴n张公告,每个公告的长度是x,高度固定为1,公告放的要尽可能靠上并尽可能靠左,每给出一张公告,要求这个公告在满足要求的情况下放在了第几层. Sample Input ...
- Billboard HDU - 2795(树状数组,单点修改,区间查询)
题目链接:https://vjudge.net/problem/HDU-2795 思路:h = 1e9行不通,因为广告是1*w的,所以n个广告最多只需要 h = n的高度,那么h=2e5就可以接受了. ...
- hdu 2795 段树--点更新
http://acm.hdu.edu.cn/showproblem.php?pid=2795 在第一和第三多学校都出现线段树,我在比赛中并没有这样做.,热身下,然后31号之前把那两道多校的线段树都搞了 ...
- hdu 2795(线段树)
解题思路:这道题很难想到是用线段树,确实转化的很巧妙 实际上,我们只需要利用线段树(记录1-h)维护哪个位置的剩余空间最大即可,即1,2,......,h是线段树的叶子节点,我们每次要找的就是叶子节点 ...
- HDU - 2795 Billboard(线段树)
题目链接:点击查看 题目大意:给定一个高度为h,宽度为w的广告牌,接下来以此给出n个高度为1,宽度为w的广告,我们需要将广告优先贴在最上边.最左边,问给出的每一个广告应该贴在哪一行,若没有位置贴了则输 ...
- hdu 1166 树状数组解
树状数组解决 (关于树状数组参考大佬的博客https://www.cnblogs.com/hsd-/p/6139376.html) 然后就很好理解这题了,代码附上 /*hdu 1166 单点修改, ...
最新文章
- 一根烟上热搜,先让AI看看你的肺
- php fatal class ziparchive not found,php中Fatal error: Class ZipArchive not found的解决办法
- 以使用QSqlQuery向数据库中插入数据为例,做一个小结
- Leetcode题库 125.验证回文串(双指针 C实现)
- 雅思8分大神叫你如何学习口语
- ap心理可以用计算机吗,AP考试哪些科目需要使用计算器
- VUE中出现 Cannot read property ‘length‘ of undefined 的错误
- 为什么现在越来越多的人买手机都喜欢从官网购买,而不从实体店买?
- oracle client安装与配置
- mysql tar.gz_记centos 安装 mysql5.7.23.tar.gz教程
- java EE :GenericServlet 抽象类、ServletConfig 接口
- 蓝丝雨零基础DNF脚本开发速成系列
- sqlServer相关
- WPF MVVM 框架
- 优启通制作系统u盘_优启通u盘装系统制作工具
- 设置jupyter notebook默认浏览器
- kafka系列(4)- kafka集群操作
- 数据仓库之数据质量管理
- Oracle ORA-01031:权限不足
- 三相电网的共模与差模