题目链接:传送门

参考文章:https://blog.csdn.net/qiqi_skystar/article/details/50299743

题意:给出一个高h,宽w的方形画板,有高位1宽为wi的单元,用这些单元去覆盖这个画板,每次求出单元在第几行,

从画板的最顶部边开始,顶部不行就最左边,如果都不行,就输出-1.

思路:

总共n次,所以高度大于n也就没有意义了(题中的h范围很大,一开始我还想用离散化,后来发现是吓唬人的)

每一行都要可以视为一个单元,所以就是求出这些行中的最大值,比较最大值与即将减去的值的大小,然后查找第一个符合条件的

值的位置。因为要记录位置,所以最好用结构体来做比较方便。

(我还是对线段树不太懂,一变形式就不知道了)

(要先占据左边的所以cur[x*2].data先比较,表示向左比较,其次再向右比较。)

代码:

#include<iostream>
#include<cstdio>
using namespace std;
const int maxn = ;
struct Node{
int Max,l,r;
}cur[maxn<<];
int h,w,n;
void pushup(int x)
{
cur[x].Max=cur[x*].Max>cur[x*+].Max?cur[x*].Max:cur[x*+].Max;
}
void build(int x,int l,int r)
{
cur[x].l=l;cur[x].r=r;cur[x].Max=w;
if(l==r) return ;
int mid=(l+r)>>;
build(x*,l,mid);
build(x*+,mid+,r);
}
void update(int x,int Item)
{
if(cur[x].l==cur[x].r)
{
printf("%d\n",cur[x].l);
cur[x].Max-=Item;
return ;
}
if(cur[x*].Max>=Item) update(x*,Item);
else update(x*+,Item);
pushup(x);
}
int main(void)
{
int x,i;
while(~scanf("%d%d%d",&h,&w,&n))
{
if(h>n) h=n;
build(,,h);
for(i=;i<=n;i++)
{
scanf("%d",&x);
if(cur[].Max>=x) update(,x);
else printf("-1\n");
}
}
return ;
}

hdu-2795(线段树的简单应用)的更多相关文章

  1. HDU 2795 线段树单点更新

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

  2. hdu 2795 线段树(纵向)

    注意h的范围和n的范围,纵向建立线段树 题意:h*w的木板,放进一些1*L的物品,求每次放空间能容纳且最上边的位子思路:每次找到最大值的位子,然后减去L线段树功能:query:区间求最大值的位子(直接 ...

  3. hdu 2795 线段树(二维问题一维化)

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

  4. HDU 2795 线段树区间最大值,单点更新+二分

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

  5. hdu 2795 线段树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 #include <cstdio> #include <cmath> # ...

  6. HDU 2795 (线段树 单点更新) Billboard

    h*w的木板,放进一些1*L的物品,求每次放空间能容纳且最上边的位子. 每次找能放纸条而且是最上面的位置,询问完以后可以同时更新,所以可以把update和query写在同一个函数里. #include ...

  7. hdu 2795线段树

    #include<stdio.h> #define N 200005 int h,w,n; struct node { int x,y,max; }a]; int mmax(int e,i ...

  8. 敌兵布阵 HDU 1166 线段树

    敌兵布阵 HDU 1166 线段树 题意 这个题是用中文来描写的,很简单,没什么弯. 解题思路 这个题肯定就是用线段树来做了,不过当时想了一下可不可用差分来做,因为不熟练就还是用了线段树来做,几乎就是 ...

  9. hdu 5877 线段树(2016 ACM/ICPC Asia Regional Dalian Online)

    Weak Pair Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  10. hdu 3974 线段树 将树弄到区间上

    Assign the task Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

随机推荐

  1. PTA 7-33 地下迷宫探索(深搜输出路径)

    地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争生活的同时,真心钦佩他们的聪明才智. ...

  2. Django xadmin后台添加富文本编辑器UEditor的用法

    效果图: 步骤: 1.利用命令:pip install DjangoUeditor,安装DjangoUeditor,但由于DjangoUeditor没有python3版本的,从的Github上把修改好 ...

  3. ORACLE数据库的关闭与重启

    一.关闭数据库 1.SHUTDOWN IMMEDIATE 这是我们常用的一种关闭数据库的方式,想很快地关闭数据库,但又想让数据库干净的关闭,常采用这种方式. 当前正在被Oracle处理的SQL语句立即 ...

  4. 在threejs中对3D物体旋转的思考

    今天在写threejs时,突然想到一个问题:一个3D物体需要旋转时,一般情况下简单的旋转我都是使用欧拉角,稍微复杂一些的情况我会把欧拉角转换成四元数进行旋转(欧拉角复杂旋转可能会产生的死锁问题),但是 ...

  5. andorid 菜单 进度条

    activity_ui2.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...

  6. [转载] Linux中的搜索文件命令

    搜索文件用处很大,我们往往需要知道一个文件存放在什么地方,我们又知道Linux是命令强大的一个系统,所以也有好多非常优秀的搜索命令.通常find不常用,因为速度慢,耗费硬盘空间.通常我们先使用wher ...

  7. soapui groovy脚本汇总

    出处:https://www.jianshu.com/p/ce6f8a1f66f4 一.一些内部元件的访问 testRunner.testCase开头 1.向下访问 testRunner.testCa ...

  8. [Hbase]Hbase章2 Hbase读写过程解析

    写数据 Hbase使用memstore和storefile存储对表的更新.数据在更新时首先写入hlog和memstore,memstore中的数据是排序的,当memstore累计到一定的阀值时,就会创 ...

  9. 修改电脑自动休眠时间win10

    https://jingyan.baidu.com/article/adc81513a481cdf723bf73e6.html

  10. 在离线安装gazebo的时候可能在运行turtlebot_gazebo的时候会出现问题

    问题显示如下 gzserver: /build/ogre-1.9-mqY1wq/ogre-1.9-1.9.0+dfsg1/OgreMain/src/OgreRenderSystem.cpp:546: ...