//===========================================
//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线段树的更多相关文章

  1. hdu2795 线段树 贴广告

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

  2. hdu2795 线段树

    //Accepted 6396 KB 3046 ms //线段树 //由于n只有200000,我们可以知道,当h>200000时,大于200000的部分是没有用的 //所以我们可以用n来创建线段 ...

  3. hdu2795(线段树单点更新&区间最值)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 题意:有一个 h * w 的板子,要在上面贴 n 条 1 * x 的广告,在贴第 i 条广告时要 ...

  4. HDU2795线段树入门 简单查询和修改

    http://acm.hdu.edu.cn/showproblem.php?pid=2795 #include<iostream> using namespace std; ; int h ...

  5. 线段树-hdu2795 Billboard(贴海报)

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

  6. HDU-------(2795)Billboard(线段树区间更新)

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

  7. 【HDU2795】Billboard(线段树)

    大意:给一个h*w的格子,然后给出多个1*w的板子往格子里面填,如果有空间尽量往上一行填满,输出行数,无法填补,则输出-1: 可以使用线段树转化问题,将每一排的格子数目放到每一个叶子节点上,然后每有一 ...

  8. 【线段树求最靠前】【HDU2795】【Billboard】

    题意: 有一个H*W的广告牌,当插入一个广告时(1*Wi),问最靠前的插入方式是什么 新生赛有个类似的题目,可惜当时居然没水过去. 果断用线段树做 以H为线段 建树,存[l,r]中最大的宽度,因为区间 ...

  9. HDU2795 billboard【转化为线段树。】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 hhanger大神的题目,水题都得有点思维. 题意:h*w的木板,放进一些1*L的物品,求每次放 ...

随机推荐

  1. 关于Asp.net超时,延长读取sql server数据库的超时时间!(已解决)

    昨天,接到客户反映说应用报“超时时间已到.在操作完成之前超时时间已过或服务器未响应”问题.从网上了一些资料,发现这个问题还是很普遍的.主要有以下两种解决方法: 第一种方法:在web.config中加上 ...

  2. Delphi在Webbrowser上绘制图像

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  3. 《windows程序设计》学习_1:初识windows程序

    #include<windows.h> int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szC ...

  4. c# 数据导出成excel 方法总结 见标红部分

    public void ServiceOrderExport(string data) { StringBuilder sb = new StringBuilder(); Type entityTyp ...

  5. linux之SQL语句简明教程---表格连接

    现在我们介绍连接 (Join) 的概念.要了解连接,我们需要用到许多我们之前已介绍过的指令.我们先假设我们有以下的两个表格, Store_Information 表格 Store_Name Sales ...

  6. hdu4334 Trouble 合并集合可以降低复杂度阿啦啦

    我觉得这一题方法很好的,但是之前完全没有碰到过,也没有想到,这么简单直接降低复杂度的方法 先将两个集合合并成1个集合,合并两个(s1,s2),即每个集合里n^2个数,还剩一个n个数的集合 这样还剩超时 ...

  7. mongodb导出命令

    ./mongoexport -d admin -c col -o col.json 找到了 导出所有数据库的 http://www.jb51.net/article/52498.htm

  8. HPU周赛题目解析

    A - Wilbur and Swimming Pool Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & ...

  9. 在SSH框架中增加SiteMesh的支持

    1)引入jar包,如下两个jar包需要导入到系统的lib文件夹中: sitemesh-2.4.jar struts2-sitemesh-plugin-2.2.1.1.jar 2)修改web.xml增加 ...

  10. CSS3中的弹性流体盒模型技术详解

    先回顾一下CSS1 和 CSS2中都已经定义了哪些布局方面的属性,这样也会增加我们理解弹性布局.   其实我们现在有很多一部分人,你们刚刚接触CSS层叠样式表,或者接触有一段时间了,但是却没有很好的去 ...