【HDU2795】Billboard

本质上,区间最大值;

高为区间长度,宽度为每个元素初始大小

PS:1 <= h,w <= 10^9,而n次放置都是放在可能位置的最上面

所以对于每一种case,取h和n的最小值建树

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 const int N=200010;
 5 int n,h,w,len[N<<2];
 6 int max(int,int),query(int,int,int,int),min(int,int);
 7 void update(int),build(int,int,int);
 8 int main(){
 9     int d,pos;
10     while (~scanf("%d %d %d",&h,&w,&n)){
11         h=min(h,n);
12         build(1,h,1);
13         for (int i=1;i<=n;i++){
14             scanf("%d",&d);
15             if (d>len[1]) printf("-1\n");
16             else printf("%d\n",query(1,1,h,d));
17         }
18     }
19     return 0;
20 }
21 void build(int l,int r,int i){
22     len[i]=w;
23     if (l==r) return;
24     int mid=(l+r)>>1;
25     build(l,mid,i<<1);
26     build(mid+1,r,i<<1|1);
27 }
28 int query(int i,int l,int r,int d){
29     if (l==r){
30         len[i]-=d;return l;
31     }
32     int mid=(l+r)>>1,ans;
33     if (len[i<<1]>=d) ans=query(i<<1,l,mid,d);
34     else ans=query(i<<1|1,mid+1,r,d);
35     update(i);
36     return ans;
37 }
38 void update(int i){
39     len[i]=max(len[i<<1],len[i<<1|1]);
40 }
41 int max(int x,int y){
42     return x>y?x:y;
43 }
44 int min(int x,int y){
45     return x<y?x:y;
46 }

STD

时间: 2024-08-09 02:03:40

【HDU2795】Billboard的相关文章

【HDU2795】Billboard(线段树)

大意:给一个h*w的格子,然后给出多个1*w的板子往格子里面填,如果有空间尽量往上一行填满,输出行数,无法填补,则输出-1: 可以使用线段树转化问题,将每一排的格子数目放到每一个叶子节点上,然后每有一块板子,进行query查询靠左子树的第一个大于板子的叶子,进行update操作更新叶子.每个节点附权值max叶子节点即可.令一个小坑是h和w的范围是1e9,数组太大.试想如果格子高度h > 板子的个数n,那么我们只需要压缩格子到n个高度即可.所有给叶子节点的存储空间就能压缩成n的范围即1e6. 1

【hdu】Billboard(线段树)

线段树的区间最大值问题,边界特殊处理一下. #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #include<vector> using namespace std; #define maxn 222222 int tree[maxn << 2]; int w,h,m,ok; void Bui

【HDOJ】2795 Billboard

线段树.注意h范围(小于等于n). 1 #include <stdio.h> 2 #include <string.h> 3 4 #define MAXN 200005 5 #define lson l, mid, rt<<1 6 #define rson mid+1, r, rt<<1|1 7 #define mymax(x, y) (x>y) ? x:y 8 9 int nums[MAXN<<2]; 10 int h, w; 11 12

【SIGGRAPH】用【有说服力的照片真实】技术实现最终幻想15的视觉特效

原文:西川善司 http://www.4gamer.net/games/075/G007535/20160726064/ 最终幻想15的演讲会场.相当大,听众非常多. 在本次计算机图形和交互技术大会[SIGGRAPH 2016]上,和游戏相关的CG技术解说方面上,SQUARE ENIX有很强的存在感.这个计划于2016年9月发售的[最终幻想15]的制作相关的会议,很多人都预订参加了.对于外海也有很高关注度的FFXV,有可以了解开发内幕的机会,多数的游戏开发者当然不会错过的. 这次报道的是,最终幻

【转】对于杭电OJ题目的分类

[好像博客园不能直接转载,所以我复制过来了..] 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze 广度搜索1006 Redraiment猜想 数论:容斥定理1007 童年生活二三事 递推题1008 University 简单hash1009 目标柏林 简单模拟题1010 Rails 模拟题(堆栈)1011 Box of Bricks 简单题1012 IMMEDI

【FFXV】中物理模拟的结构以及游戏业界的乐趣

11月2日是在日本兵库县神户会议中心召开的[SIGGRAPH ASIA 2015]的第一天,在游戏开发专门的研究会[R&D in the Video Game Industry]上,展开了[FINAL FANTASY XV]的物理模拟的解说会议[Physics Simulation R&D at SQUARE ENIX]. 原文作者:西川善司 http://www.4gamer.net/games/075/G007535/20151104067/ 负责演讲的 Witawat Rungjir

【Unity】9.3 粒子系统生成器详解

分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 上一节已经介绍过了在Unity 5.x中两种创建粒子效果的方式(方式1.方式2). 这一节我们主要学习第2种方式的基本概念和用法. Unity 5.x提供的新版粒子系统生成器(Particle System)也叫Shuriken粒子系统,该生成器采用模块化管理,个性化的粒子模块,配台粒子曲线编辑器,使用户很容易就能创作出各种缤纷复杂的粒子效果. 1.粒子系统检视器 粒子系统检视器 (Particle System I

【Unity】4.3 地形编辑器

分类:Unity.C#.VS2015 创建日期:2016-04-10 一.简介 Unity拥有功能完善的地形编辑器,支持以笔刷绘制的方式实时雕刻出山脉.峡谷.平原.高地等地形.Unity地形编辑器同时提供了实时绘制地表材质纹理.树木种植.大面枳草地布置等功能.值得-提的是,Unity中的地形编辑器支持LOD(Level of Detail)功能,能够根据摄像机与地形的距离以及地形起伏程度调整地形块(Patch)网格的疏密程度.远处或平坦的地形块使用稀疏的网格,近处或陡峭的地形块使用密集的网格.这

【转】UML的9种图例解析

UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什么样的功能,要承担什么样的义务.一个类可以有多种职责,设计得好的类一般只有一种职责,在定义类的时候,将类的职责分解成为类的属性和操作(即方法). 3) 类的属性即类的数据职责,类的操作即类的行为职责 一.依赖关系(Dependence) 依