hdu2795线段树
//===========================================
//segment tree
//final version
//by kevin_samuel(fenice)
//以h离散化构建线段树
#include <iostream>
#include <cstdio>
#include <cmath> using namespace std; #define MAXN 201050
#define INF 0x3fffffff int h,w,n;
int A[MAXN];
//int max;
//int min; struct node
{
int left;
int right;
int max;
}Tree[MAXN<<2]; void maintain(int root)
{
int LC = root<<1;
int RC = (root<<1)+1;
Tree[root].max = max(Tree[LC].max,Tree[RC].max);
} void Build(int root,int start,int end)
{
Tree[root].left = start;
Tree[root].right = end;
if(start == end)
{
Tree[root].max = w;
return;
}
int mid = (start + end)>>1;
Build(root<<1,start,mid);
Build((root<<1)+1,mid+1,end);
maintain(root);
} void update(int root,int pos,int value)
{
if(Tree[root].left == Tree[root].right)
{
Tree[root].max -= value;
return;
}
int mid = (Tree[root].left + Tree[root].right)>>1;
if(pos <= mid)
update(root<<1,pos,value);
else
update((root<<1)+1,pos,value);
maintain(root);
} int Query(int root,int start,int end,int value)
{
if(Tree[root].max < value)
return -1;
if(start == end)
return start;
int mid = (start + end)>>1;
if(Tree[root<<1].max >= value)
return Query(root<<1,start,mid,value);
else
return Query(root<<1|1,mid+1,end,value); } int main()
{
while(scanf("%d%d%d",&h,&w,&n)!=EOF)
{
int hh = min(h,n);
Build(1,1,hh);
for(int i = 1; i <= n; i++)
{
scanf("%d",&A[i]);
int ans = Query(1,1,hh,A[i]);
cout<<ans<<endl;
if(ans != -1)
update(1,ans,A[i]);
}
}
return 0;
}
hdu2795线段树的更多相关文章
- hdu2795 线段树 贴广告
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu2795 线段树
//Accepted 6396 KB 3046 ms //线段树 //由于n只有200000,我们可以知道,当h>200000时,大于200000的部分是没有用的 //所以我们可以用n来创建线段 ...
- hdu2795(线段树单点更新&区间最值)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 题意:有一个 h * w 的板子,要在上面贴 n 条 1 * x 的广告,在贴第 i 条广告时要 ...
- HDU2795线段树入门 简单查询和修改
http://acm.hdu.edu.cn/showproblem.php?pid=2795 #include<iostream> using namespace std; ; int h ...
- 线段树-hdu2795 Billboard(贴海报)
hdu2795 Billboard 题意:h*w的木板,放进一些1*L的物品,求每次放空间能容纳且最上边的位子 思路:每次找到最大值的位子,然后减去L 线段树功能:query:区间求最大值的位子(直接 ...
- HDU-------(2795)Billboard(线段树区间更新)
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 【HDU2795】Billboard(线段树)
大意:给一个h*w的格子,然后给出多个1*w的板子往格子里面填,如果有空间尽量往上一行填满,输出行数,无法填补,则输出-1: 可以使用线段树转化问题,将每一排的格子数目放到每一个叶子节点上,然后每有一 ...
- 【线段树求最靠前】【HDU2795】【Billboard】
题意: 有一个H*W的广告牌,当插入一个广告时(1*Wi),问最靠前的插入方式是什么 新生赛有个类似的题目,可惜当时居然没水过去. 果断用线段树做 以H为线段 建树,存[l,r]中最大的宽度,因为区间 ...
- HDU2795 billboard【转化为线段树。】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 hhanger大神的题目,水题都得有点思维. 题意:h*w的木板,放进一些1*L的物品,求每次放 ...
随机推荐
- Mysql ORM工具--MicrobeORM.Mysql开源咯
MicrobeORM.Mysql 补充:为啥批批量比官方的ADO.NET还快,原因是这俩货 System.EnterpriseServices.dllSystem.EnterpriseServices ...
- python官方文档
Tutorialstart here Library Referencekeep this under your pillow Language Referencedescribes syntax a ...
- OpenStack securityGroup rule Set
OpenStack DBaas 云数据即服务之☞troveError
- http 中get和post
1. http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html 浅谈HTTP中Get与Post的区别 2009-03-31 14:51 ...
- iOS GCD详解
前言 对初学者来说,GCD似乎是一道迈不过去的坎,很多人在同步.异步.串行.并行和死锁这几个名词的漩涡中渐渐放弃治疗.本文将使用图文表并茂的方式给大家形象地解释其中的原理和规律. 线程.任务和队列的概 ...
- Sending HTML Form Data
public Task<HttpResponseMessage> PostFormData(){ // Check if the request contains multipart/fo ...
- 源码推荐(7.17):不规则按钮类似于遥控器按钮,一个可以最大程度简化PageView与TabView切换的第三方框架
不规则按钮,类似于遥控器按钮,可以单独控制按钮的上下左右(作者:masa_chu) 不规则按钮,类似于遥控器按钮,可以单独控制按钮的上下左右 测试环境:Xcode 6.2,iOS 6.0以上 Lazy ...
- 代码混淆 GSON完满解决
头疼的问题,json使用了google的gson三方包,可是混淆的时候出了问题 明明已经按照gson的官方文档,把混淆脚本加上去了,却还是出问题. 今天同事找到一篇博客,关于这个问题的: 我们是将js ...
- .net 链接ORACLE的安装包
odp.net.ma
- jQuery.innerWidth() 函数详解
innerWidth()函数用于设置或返回当前匹配元素的内宽度. 内宽度包括元素的内边距(padding),但不包括外边距(margin).边框(border)等部分的高度.如下图: 如果你要获取 ...