【HDU2795】Billboard(线段树)
大意:给一个h*w的格子,然后给出多个1*w的板子往格子里面填,如果有空间尽量往上一行填满,输出行数,无法填补,则输出-1;
可以使用线段树转化问题,将每一排的格子数目放到每一个叶子节点上,然后每有一块板子,进行query查询靠左子树的第一个大于板子的叶子,进行update操作更新叶子。每个节点附权值max叶子节点即可。令一个小坑是h和w的范围是1e9,数组太大。试想如果格子高度h > 板子的个数n,那么我们只需要压缩格子到n个高度即可。所有给叶子节点的存储空间就能压缩成n的范围即1e6。
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <cctype>
#include <algorithm>
#include <numeric>
#include <climits>
#include <vector>
#include <string>
using namespace std; const int maxn = + ;
int maxv[maxn << ]; void PushUp (int rt) {
maxv[rt] = max (maxv[rt * ], maxv[rt * + ] );
} void build (int w, int l, int r, int rt) {
maxv[rt] = w;
if (l == r) {
return ;
}
int m = (l + r) / ;
build (w, l, m, rt * );
build (w, m + , r, rt * + );
} int query (int x, int l, int r, int rt) {
if (r == l) {
maxv[rt] -= x;
return l;
}
int m = (l + r) / ;
int ret;
if (maxv[rt * ] >= x) {
ret = query (x, l, m, rt * );
} else {
ret = query (x, m + , r, rt * + );
}
PushUp(rt);
return ret;
} int main () {
int h, w, n; while (~scanf ("%d %d %d", &h, &w, &n)) {
if (h > n) {
h = n;
}
build (w, , h, );
while (n --) {
int x; scanf ("%d", &x);
if (maxv[] < x) {
printf ("%d\n", -);
} else {
printf ("%d\n", query (x, , h, ));
}
}
}
return ;
}
【HDU2795】Billboard(线段树)的更多相关文章
- HDU-------(2795)Billboard(线段树区间更新)
		Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ... 
- hdu2795(Billboard)线段树
		Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ... 
- hdu2795 Billboard(线段树单点修改)
		传送门 结点中的l和r表示层数,maxx表示这层最多还剩下多少宽度.根据公告的宽度取找到可以放的那一层 找到后返回层数,并修改maxx #include<bits/stdc++.h> us ... 
- HUD.2795 Billboard ( 线段树 区间最值 单点更新 单点查询 建树技巧)
		HUD.2795 Billboard ( 线段树 区间最值 单点更新 单点查询 建树技巧) 题意分析 题目大意:一个h*w的公告牌,要在其上贴公告. 输入的是1*wi的w值,这些是公告的尺寸. 贴公告 ... 
- [HDU] 2795 Billboard [线段树区间求最值]
		Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ... 
- Billboard(线段树)
		Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ... 
- HDU 2795 Billboard 线段树,区间最大值,单点更新
		Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ... 
- hdu 2795 Billboard 线段树单点更新
		Billboard Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=279 ... 
- ACM学习历程—HDU 2795 Billboard(线段树)
		Description At the entrance to the university, there is a huge rectangular billboard of size h*w (h ... 
- HDU 2795 Billboard (线段树)
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 题目大意:有一块h*w的矩形广告板,要往上面贴广告; 然后给n个1*wi的广告,要求把广告贴 ... 
随机推荐
- 自制USB wifi信号放大天线
			这是我的usb wifi天线第一个版本,灵感来自: http://www.instructables.com/id/EQARE4I72GEPUCHTHU/ http://www.usbwifi.orc ... 
- 删除ubuntu旧内核
			ubuntu的内核经常升级,而老内核并不自动卸载.时间长了,就有一大堆内核垃圾,需要我们手动去清理. 先用uname -a 查看当前内核版本: xzc@xzc-HP-ProBook-4446s:~$ ... 
- qt tablewidget中单个和批量删除代码如下(部分)截图如下
			def coltable(self):#行删除 row=self.downwidget.currentRow() select=self.downwidget.isItemSelected ... 
- class 类(3) 继承
			继承(Inheritance)是面向对象软 件技术当中的一个概念.如果一个类别A“继承自”另一个类别B,就把这个A称为“B的子类别”,而把B称为“A的父类别”,也可以称“B是A的超类”. 继承可以使得 ... 
- 正则表达式获取URL参数
			使用到的正则表达式: [^\?&]?参数名=[^&]+ document.location.getURLPara = function (name) { var reg = new R ... 
- JSP实现分页功能
			分页须知知识点: (1)JDBC2.0的可滚动结果集. (2)HTTP GET请求. 一.可滚动结果集 Connection con = DriverManager.getConnection( ... 
- Android动态加载jar/dex
			前言 在目前的软硬件环境下,Native App与Web App在用户体验上有着明显的优势,但在实际项目中有些会因为业务的频繁变更而频繁的升级客户端,造成较差的用户体验,而这也恰恰是Web App的优 ... 
- 安装oracle11g未找到文件WFMLRSVCApp.ear文件
			win7_64位系统,安装oracle11gR2时,报错提示: 未找到文件...WFMLRSVCApp.ear文件 解决方法如下: 将下载的两个压缩包解压至同一目录(合并)再安装即可解决此类问题. 
- oracle创建表空间-用户-角色-授权
			1.创建数据表空间: SQL> create tablespace rusky_data datafile 'D:\rusky\rusky_data01,dbf' size 10M autoex ... 
- 关于sed的应用
			公司让我做一个看一下在优化的程序和比原来的程序快多少,但是文件还在运行的服务器上,我需要把用到的文件复制到测试服务器上去.但是测试服务器上有的,目录不全,会导致scp出错.就发生了以下的故事. 首选我 ... 
