博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 2795(单点改动)
阅读量:5067 次
发布时间:2019-06-12

本文共 1392 字,大约阅读时间需要 4 分钟。

题意:有h×w大的公告板。有n条公告要写入,每条公告高度都是1,宽度是wi,每次从最上最左的空位写,假设有空位输出第几行。假设没有足够空位输出-1。

题解:注意h最大1e9。但事实上是看n的大小。由于假设有n条公告最多占n行,所以线段树最大是min(h,n)。

#include 
#include
#include
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;}
posted on
2017-07-19 08:42 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/mthoutai/p/7203818.html

你可能感兴趣的文章
vue+element+echarts柱状图+列表
查看>>
JMS ActiveMQ案例
查看>>
Android简化xml sax解析
查看>>
POJ 2763 Housewife Wind
查看>>
第8章 线性时间排序
查看>>
C语言中一个语句太长用什么换行?
查看>>
SQL with(unlock)与with(readpast) (转)
查看>>
什么是长尾理论
查看>>
html5-6 Frame框架窗口类型
查看>>
新东方雅思词汇---6.1、oppose
查看>>
DFS序
查看>>
js进阶ajax函数封装(匿名函数作为参数传递)(封装函数引入文件的方式非常好用)...
查看>>
tomcat服务器安装
查看>>
SQL中的long text
查看>>
jsp中<%! %>
查看>>
CSUOJ-1980 不堪重负的数(区间dp)
查看>>
你对博客中提到的评分规则有何意见和建议?
查看>>
Oracle-RAC安装随笔
查看>>
Linux下screen的应用
查看>>
第一百七十四节,jQuery,Ajax进阶
查看>>