Billboard

通过这题,我知道了要活用线段树的思想,而不是拘泥于形式, 就比如这题 显然更新和查询放在一起很简单 但如果分开写 那么我觉得难度会大大增加

【题目链接】Billboard

【题目类型】区间求最大值的位置update的操作在query里做了

&题意:

h*w的木板,放进一些1*L的物品,求每次放空间能容纳且最上边的位子

&题解:

思路:每次找到最大值的位子,然后减去L

线段树功能:query

区间求最大值的位置(直接把update的操作在query里做了)

【时间复杂度】\(O(nlogn)\)

&代码:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 200000 + 9 ;
int h,w,n;
int seg[maxn<<2];
inline void PushUp(int rt)
{
seg[rt]=max(seg[rt<<1],seg[rt<<1|1]);
}
void Build(int b,int e,int rt)
{
if (b==e){
seg[rt]=w;
return;
}
int m=b+e>>1;
Build(b,m,rt<<1);
Build(m+1,e,rt<<1|1);
PushUp(rt);
}
//把更新和查询放在了一起
int Query(int xx,int b,int e,int rt)
{
if (b==e){
seg[rt]-=xx;
return b;
}
int m=b+e>>1;
int re=0;
//这里保证了先从小的序号开始找
if (seg[rt<<1]>=xx)
re=Query(xx,b,m,rt<<1);
else
re=Query(xx,m+1,e,rt<<1|1);
PushUp(rt);
return re;
}
void Solve()
{
while(~scanf("%d%d%d",&h,&w,&n)){
h=min(h,n);
Build(1,h,1);
for(int i=0;i<n;i++){
int t;
scanf("%d",&t);
if (seg[1]<t) puts("-1");
else {
printf("%d\n",Query(t,1,h,1));
}
}
}
}
int main()
{
Solve();
return 0;
}

HDU 2795 Billboard(区间求最大值的位置update的操作在query里做了)的更多相关文章

  1. [HDU] 2795 Billboard [线段树区间求最值]

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

  2. HDU 2795 Billboard(宣传栏贴公告,线段树应用)

    HDU 2795 Billboard(宣传栏贴公告,线段树应用) ACM 题目地址:HDU 2795 Billboard 题意:  要在h*w宣传栏上贴公告,每条公告的高度都是为1的,并且每条公告都要 ...

  3. HDU 2795 Billboard (线段树单点更新 && 求区间最值位置)

    题意 : 有一块 h * w 的公告板,现在往上面贴 n 张长恒为 1 宽为 wi 的公告,每次贴的地方都是尽量靠左靠上,问你每一张公告将被贴在1~h的哪一行?按照输入顺序给出. 分析 : 这道题说明 ...

  4. HDU 2795 Billboard 【线段树维护区间最大值&&查询变形】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=2795 Billboard Time Limit: 20000/8000 MS (Java/Others) ...

  5. HDU 2795——Billboard——————【单点更新、求最小位置】

    Billboard Time Limit:8000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit St ...

  6. HDU 2795 Billboard(线段树的另类应用)

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

  7. hdu 2795 Billboard(线段树+单点更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 Billboard Time Limit: 20000/8000 MS (Java/Others ...

  8. HDU 2795 Billboard (线段树+贪心)

    手动博客搬家:本文发表于20170822 21:30:17, 原地址https://blog.csdn.net/suncongbo/article/details/77488127 URL: http ...

  9. 线段树区间求最大值(点更新)---I Hate It

    HDU   1754 Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的 ...

随机推荐

  1. js参数传递分析

    需要明白,js基本类型存放在栈,对象存放在堆. 结论:基本类型变量作为参数,不会改变变量值.对象变量作为参数,不修改属性(访问原始对象的操作),也不会改变变量值 起因,是群里一个问题: var a = ...

  2. amazon oa2 - insert a value into a cycled linked list

    遍历,一共有三种情况, 1. pre <= x <= current 2. 遍历到了head时,x>tail 或者 x<=head (不会等于tail) 3. 遍历回aNode ...

  3. CentOS7.1配置源

    现在网上最新的是CentOS7.1, 但是在配置国内流行的163源的时候,网上的文章大多数我这里都通不过. 错误信息大概是: One of the configured repositories fa ...

  4. C语言读取PE文件信息(一)

    接下来的内容来源于对该博客文章http://www.pediy.com/kssd/pediy06/pediy7006.htm的解析. 一.打印Sections信息.下面的程序打印出Windows_Gr ...

  5. Makefile 学习&binutils工具集,软件开发利器

    gcc -E 能有效的帮助我们解决与宏有关的编译错误: gcc -S能获得一个C源程序文件的汇编程序: gcc -v能获得系统头文件的路径 生成依赖关系: gcc -M gcc -MM 生成不包含系统 ...

  6. 利用spring AOP 和注解实现方法中查cache-我们到底能走多远系列(46)

    主题:这份代码是开发中常见的代码,查询数据库某个主表的数据,为了提高性能,做一次缓存,每次调用时先拿缓存数据,有则直接返回,没有才向数据库查数据,降低数据库压力. public Merchant lo ...

  7. MVCC PostgreSQL实现事务和多版本并发控制的精华

    原创文章,同步发自作者个人博客,http://www.jasongj.com/sql/mvcc/ PostgreSQL针对ACID的实现机制 事务的实现原理可以解读为RDBMS采取何种技术确保事务的A ...

  8. JDBC向数据库中插入数据

    新建数据库,并插入相关数据. create database bbs; use bbs; create table article ( id int primary key auto_incremen ...

  9. Hello Docker (Docker 入门分享)

    Hello Docker 1 PPT @ http://download.csdn.net/download/liangread/9431056 TBD

  10. android 观察者模式

    1:观察者模式:   1:使用场景:一般使用在自定义控件的事件点击监听上面(或者封装方法进行回调) 2:写观察者模式步骤: (1):声明一个接口 (2):接口里面封装一个抽象方法 (3):需要封装一个 ...