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");
else
printf("%d\n", query(1, 1, temp, x));
}
}
return 0;
}
hdu 2795(单点改动)的更多相关文章
- HDU 2795 单点更新,区间优先查找(想法)
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 2795——Billboard——————【单点更新、求最小位置】
Billboard Time Limit:8000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit St ...
- Billboard (HDU 2795)
Billboard (HDU 2795) Hdu 2795 注意到每个广告的长度是1,因此可以将每这一张广告牌当成一个数列表示,每个初始值为w.使用线段树维护这个数列,每次查询为找到这个数列第一个大于 ...
- HDU 2795 Billboard(线段树的另类应用)
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 2795 Billboard(宣传栏贴公告,线段树应用)
HDU 2795 Billboard(宣传栏贴公告,线段树应用) ACM 题目地址:HDU 2795 Billboard 题意: 要在h*w宣传栏上贴公告,每条公告的高度都是为1的,并且每条公告都要 ...
- hdu 2795 Billboard 线段树单点更新
Billboard Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=279 ...
- hdu 2795 Billboard(线段树+单点更新)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 Billboard Time Limit: 20000/8000 MS (Java/Others ...
- HDU 2795 (线段树 单点更新) Billboard
h*w的木板,放进一些1*L的物品,求每次放空间能容纳且最上边的位子. 每次找能放纸条而且是最上面的位置,询问完以后可以同时更新,所以可以把update和query写在同一个函数里. #include ...
- 线段树练习[单点更新] HDU 2795 Billboard
题目大意:有一个h*w的公告榜,可以依次在上面添加信息.每个信息的长度为x,高为1. 优先在最上面加入,如果空间足够的话,然后优先放在最左面.统计每条公告最终的位置,即它所在的行数. 这里是线段树来存 ...
随机推荐
- mysql启动错误排查-无法申请足够内存
一般情况下mysql的启动错误还是很容易排查的,但是今天我们就来说一下不一般的情况.拿到一台服务器,安装完mysql后进行启动,启动错误如下: 有同学会说,哥们儿你是不是buffer pool设置太大 ...
- Java-从一个字符串获取子字符串
substring函数 package com.tj; public class MyClass implements Cloneable { public static void main(Stri ...
- Java-列出一个类实现的所有接口
package com.tj; public class MyClass2 { public static void main(String[] args) { Class cls = java.la ...
- [!] The ‘Pods-项目名XXX' target has frameworks with conflicting names:XXX.framework.
在集成网易 即时通讯IM时报如下错误: [!] The ‘Pods-Yepu' target has frameworks with conflicting names: nimsdk.framewo ...
- 六丶人生苦短,我用python【第六篇】
Python基础之函数 三元运算 三元运算(三目运算),是对简单的条件语句的缩写. # 书写格式 result = 值1 if 条件 else 值2 # 如果条件成立,那么将 “值1” 赋值给resu ...
- unittest单元测试(测试报告生成)
自动化测试执行完成之后,我们需要生成测试报告来查看测试结果,使用HTMLTestRunner模块可以直接生产Html格式的报告. 下载地址: http://tungwaiyip.info/softwa ...
- CodeBlocks "no such file or directory
1但编译时还是会报错:no such file or directory;这是为什么呢? :在项目/构建选项/搜索路径 选项下,点击添加按钮,添加自己的头文件的存放文件夹,搞定... 2.code ...
- Ubuntu16.04 on ThinkPad E455 不能识别耳机 的解决方法
去年 (2016) 2月份在ThinkPad E455 上安装了Ubuntu 14.04 LTS (dual boot with Windows 10, upgraded to Ubuntu 16.0 ...
- Educational Codeforces Round 13——D. Iterated Linear Function(矩阵快速幂或普通快速幂水题)
D. Iterated Linear Function time limit per test 1 second memory limit per test 256 megabytes input ...
- BZOJ 2286 [Sdoi2011]消耗战 ——虚树
虚树第一题. 大概就是建一颗只与询问有关的更小的新树,然后在虚树上DP #include <map> #include <ctime> #include <cmath&g ...