Billboard (线段树)
每年开学,正是各大社团招新之际。
每个社团为了吸引更多的小学妹小学弟就会派出身强体壮的华师男去海报墙上粘贴海报。
开学之初,高为h,宽为w的海报墙还是空的。
然后,华师男轮流粘贴高为1,宽为wi的海报。
贴海报时,机智的华师男总是会优先选择最上面的位置来帖,而且在所有最上面的可能位置中,他会选择最左面的位置。但是不能把已经贴好的海报盖住并且不能超出海报墙的范围。
机智的华师男能够自然能够秒秒钟得出自己的海报应该粘贴在第几行啦。
Input
有多组样例,但是不会超过40个。
对于每组样例,第一行包含3个整数h,w,n(1 <= h,w <= 10^9; 1 <= n <= 200,000) -海报墙的高度和宽度,以及海报的张数。
下面n行每行一个整数 wi (1 <= wi <= 10^9) - 代表第i张海报的宽度.
Output
对于每张海报,输出它被贴在第几行,顶部是第一行。如果某广告不能贴不下了,则输出-1。
Sample Input
3 5 5 2 4 3 3 3
Sample Output
1 2 1 3 -1
#include <iostream>
#define lson l, m, rt << 1
#define rson m + 1, r, rt << 1 | 1
using namespace std;
const int MAX = 2e5 + 5;
int st[MAX << 2];
int h, w, n;
int num[MAX];
void PushUp (int rt){ //不需要st[rt] = st[rt << 1] + st[rt << 1 | 1];
}
void Build (int l, int r, int rt){st[rt] = w; //终要if (l == r){return ;}int m = (l + r) >> 1;Build(lson);Build(rson);
}
int Update (int pos,int l, int r, int rt){if (l == r){st[rt] -= pos;return l;}int m = (l + r) >> 1;int res = 0;if (pos <= st[rt << 1]){ //!!!!!! //重要res += Update(pos, lson);}else {res += Update(pos, rson);}st[rt] = max(st[rt << 1], st[rt << 1 | 1]); //!!!!!!!重要return res;
}
int main()
{ios::sync_with_stdio(false);while (cin >> h >> w >> n){if (h > n){h = n;}Build (1, h, 1);for (int i = 1; i <= n; i++){cin >> num[i];}for (int i = 1; i <= n; i++){if (num[i] > st[1]){cout << -1 << endl;}else {cout << Update(num[i], 1, h, 1) << endl;}}}return 0;
}
Billboard (线段树)相关推荐
- HDU 2795 Billboard (线段树+贪心)
HDU 2795 Billboard (线段树+贪心) 手动博客搬家:本文发表于20170822 21:30:17, 原地址https://blog.csdn.net/suncongbo/articl ...
- HDU - 2795 Billboard(线段树)
题目链接:点击查看 题目大意:给定一个高度为h,宽度为w的广告牌,接下来以此给出n个高度为1,宽度为w的广告,我们需要将广告优先贴在最上边.最左边,问给出的每一个广告应该贴在哪一行,若没有位置贴了则输 ...
- hdu2795 Billboard 线段树
题意: 给出一块h*w的广告牌,还有n张1*u的海报,海报尽量往上,左边的位置张贴,问每一张海报能贴的多高. 线段树单点修改. 注意:因为1 <= h,w <= 10^9; 1 <= ...
- HDU2795 Billboard 线段树
这是一道简单的线段树,只需要考虑好我们建树的方式即可! 我们以高h来建树,点的权值为W,通过来维护区间的最大值,我们很快就能查找到编号最小的点切大于等于wi..明白之后就是一道简单的线段树单点更新,维 ...
- HDU_2795 Billboard(线段树)
/*题意:输出每次贴上的海报所在的行号,行号为1...h; 开始拿到这题没思路,后来问了问本校的大牛,终于找到思路.这题是按high建树,结构体中定义一个len变量,存放当前该结点的空闲长度.某结点的 ...
- 线段树——思维(Codeforces 339D Xenia and Bit Operations/Billboard HDU - 2795)
Codeforces 339D Xenia and Bit Operations vj地址 题意:给出2的n次方个数,每次将现在这个序列中相邻的两个数运算后合并为一个数,得到一个新的序列,这个新序列的 ...
- Billboard(海报粘贴简单的线段树)
题目来源:[NWPU][2014][TRN][13]线段树第一讲 G 题 http://vjudge.net/contest/view.action?cid=50850#problem/G 作者:n ...
- 【HDU2795】Billboard(线段树)
大意:给一个h*w的格子,然后给出多个1*w的板子往格子里面填,如果有空间尽量往上一行填满,输出行数,无法填补,则输出-1: 可以使用线段树转化问题,将每一排的格子数目放到每一个叶子节点上,然后每有一 ...
- 数据结构---线段树
线段树 转载请注明出处,谢谢!http://blog.csdn.net/metalseed/article/details/8039326 持续更新中··· 一:线段树基本概念 1:概述 线段树 ...
- 【转】线段树题目 汇总 讲解(by not only success)
转载自:http://www.notonlysuccess.com/ 非常喜欢他的代码风格以及简洁的思路,感谢notonlysuccess! PS:他的个人网站好像是上不去了-.- 线段树 很早前写的 ...
最新文章
- python流程图基本元素-Python初学(十一)
- SAP ERP项目各模块设计重点
- 七十三、SpringBoot整合Jpa
- 如何在windows下安装JDK
- 官宣丨中国移动云能力中心新增5项可信云认证,斩获2项大奖!
- oracle conneciton properties,在WAS Liberty连接池中,我可以验证借用连接吗?
- 从程序员到项目经理(9):程序员加油站 -- 再牛也要合群【转载】
- 遗传相似系数怎么计算_如何计算遗传变异系数
- WWDC 2019 大会前瞻:暗黑模式来袭、iOS 与 macOS 互通?
- JavaWeb—作业【建立新闻数据库以及插入数据】
- 深入理解Nginx~正常运行的配置项
- 语音信号预处理1——chirp信号的生成与接收
- Cipher文件加密
- 数据库实验1---创建数据库和表
- 服务器系统分辨率调不了,win10系统分辨率调整显示灰色_网站服务器运行维护
- 从头学习爬虫(十六)进阶篇----第三方接口
- 数据的类型:分类数据、顺序数据、数值型数据
- 【记录】凯酷84说明书
- studing method for linux
- Javascript——js常用的方法(一)...........
热门文章
- 直播间搭建中关于短音效开发的直播间源码实现方式
- pajek02:点、线、方向、数值和增删改操作(创建“全数弧”随机社会网络)
- 标准查询分析器:Solr的默认查询解析器也称为“Lucene”解析器。
- Gurobi求解运输问题
- 【单片机毕业设计】【mcuclub-jj-053】基于单片机的宠物喂食器的设计
- c语言 checksum,容易被忽视的IP报头中的Checksum校验和
- 安川机器人Yaskawa
- CSS_渐变过渡_动画
- 三维程序/游戏制作基本常识
- 一个月面试4家,3家Offer,来看看面霸真君如何面试的