http://acm.hdu.edu.cn/showproblem.php?pid=2795

单点更新,树存储的为某一行内剩余的长度

// File Name: hdu2795.cpp
// Author: bo_jwolf
// Created Time: 2013年08月16日 星期五 22时13分41秒 #include<vector>
#include<list>
#include<map>
#include<set>
#include<deque>
#include<stack>
#include<bitset>
#include<algorithm>
#include<functional>
#include<numeric>
#include<utility>
#include<sstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime> using namespace std;
#define maxn 200005
#define lson l , m , rt << 1
#define rson m + 1 , r , rt << 1 | 1 int Max[ maxn << 2 ] ;
int h , w , n ;
void PushUp( int rt )
{
Max[ rt ] = max( Max[ rt << 1 ] , Max[ rt << 1 | 1 ] );
} void build( int l , int r , int rt )
{
Max[ rt ] = w ;
if( l == r )
return ;
int m = ( l + r ) >> 1 ;
build( lson ) ;
build( rson ) ;
} int query( int x , int l , int r , int rt )
{
if( l == r )
{
Max[ rt ] -= x ;
return l ;
}
int m = ( l + r ) >> 1 ;
int ret = ( Max[ rt << 1 ] >= x ) ? query( x , lson ) :query( x ,rson ) ;
PushUp( rt ) ;
return ret ;
} int main()
{
while( ~scanf( "%d%d%d" , &h ,&w , &n ) )
{
if( h > n )
h = n ;
build( 1 , h , 1 ) ;
while( n-- )
{
int x ;
scanf( "%d" , &x ) ;
if( Max[ 1 ] < x )
printf( "-1\n" ) ;
else
printf( "%d\n" , query( x , 1 , h , 1 ) ) ;
}
}
return 0;
}

hdu2795Billboard(线段树)的更多相关文章

  1. hdu2795Billboard(线段树,找第一个大于w的点)

    Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  2. hdu2795billboard线段树

    题目链接:http://icpc.njust.edu.cn/Problem/Hdu/2795/ 题目大意:有一块长方形木板,从上到下被分成h*w的区域,现要将n个长条放进这些区域中,要求从上到下只要后 ...

  3. 线段树---HDU2795Billboard

    这道题跟第二个题差不多,求单点的最大值. 题目大意:有个高和宽分别为h, w的广告牌, 这个广告牌分成高为 1 的长条, 每条分别能贴长度为wi长度的广告, 输入的n为广告的条数,广告优先贴在最上边和 ...

  4. 线段树:HDU2795-Billboard(建树方式比较新奇)

    Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  5. HDU-2795Billboard+对宽度建立线段树

    参考:  https://blog.csdn.net/qiqi_skystar/article/details/49073309 传送门:http://acm.hdu.edu.cn/showprobl ...

  6. bzoj3932--可持久化线段树

    题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...

  7. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  8. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  9. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

随机推荐

  1. LINQ Enumerable 续 II

    Enumerable.TakeWhile和Enumerable.SkpWhile Enumerable.TakeWhile和Enumerable.SkpWhile将通过判断条件,来获取和跳过序列. T ...

  2. hdu 2218

    题意: 切蛋糕问题 水题...... AC代码: #include <iostream> using namespace std; int main() { int a[6],i,n; c ...

  3. UGUI之UI的深度问题

    学过NGUI的都知道,NGUI的深度是通过值来控制的.Panel也是UI也是,如果空间太多,布局复杂UI深度的值会变得很混乱.所以在NGUI中设置UI深度时一定要多加思考.然而在UGUI控制显示顺序的 ...

  4. VS2013默认快捷键

    目录: Global 分析 调试器上下文菜单 体系结构 调试器上下文菜单 生成 诊断中心 类视图上下文菜单 Edit 调试 编辑器上下文菜单 文件 项目和解决方案上下文菜单 帮助 重构 负载测试 解决 ...

  5. Win8节省C盘空间攻略

    问题分析: 1.系统页面文件(虚拟内存)占用空间 2.自动更新的缓存文件 3.系统保护的备份文件(系统还原用的) 4.休眠文件 5.索引文件 6.桌面文件 解决办法: 1.机器是8G内存,完全不需要虚 ...

  6. iOS实现OAuth2.0中刷新access token并重新请求数据操作

    一.简要概述 OAuth2.0是OAuth协议的下一版本,时常用于移动客户端的开发,是一种比较安全的机制.在OAuth 2.0中,server将发行一个短有效期的access token和长生命期的r ...

  7. iOS中解析 XML / JSON

    JSON数据格式 1. 概述: JSON (JavaScript Object Notation) 是⼀一种轻量级的数据交换格式 基于⽂文本格式,易于⼈人阅读和编写,同时也易于机器解析和⽣生成. 2. ...

  8. C#数组的使用

    //计算数组中最大值,最小值,平均值和总和 //类中main最先执行 static void Main(string[] args) { //声明一个数组,数组长度一定固定就不能更改了 , , , , ...

  9. WindowManager

    我们Android平台是一个又一个的Activity组成的,每一个Activity有一个或者多个View构成.所以说,当我们想显示一个界面的时候,我们首先想到的是建立一个Activity,然后所有的操 ...

  10. js中的apply call 操作小结(参考自网络)

    1.方法定义 call方法:  语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象 说明: call ...