注意h的范围和n的范围,纵向建立线段树

题意:h*w的木板,放进一些1*L的物品,求每次放空间能容纳且最上边的位子
思路:每次找到最大值的位子,然后减去L
线段树功能:query:区间求最大值的位子(直接把update的操作在query里做了)
3 5 5
2
4
3
3
3

1
2
1
3
-1

2015-05-15

 #include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
using namespace std;
#define MOD 1000000007
const int INF=0x3f3f3f3f;
const double eps=1e-;
#define cl(a) memset(a,0,sizeof(a))
#define ts printf("*****\n");
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define root 1,n,1
#define mid ((l+r)>>1)
const int MAXN=;
int n,m,t;
int num[MAXN],w,h;
struct Node
{
int l,r;
int sum;
}node[MAXN<<];
void build(int l,int r,int rt)
{
node[rt].l=l;
node[rt].r=r;
node[rt].sum=w;
if(l==r) return;
build(lson);
build(rson);
}
int query(int val,int rt)
{
if(node[rt].l==node[rt].r)
{
node[rt].sum-=val;
return node[rt].l;
}
int ret=;
if(node[rt<<].sum>=val) ret=query(val,rt<<);
else ret=query(val,rt<<|);
node[rt].sum=max(node[rt<<|].sum,node[rt<<].sum);
return ret;
}
int main()
{
int i,j,k,tt;
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
#endif
while(~scanf("%d%d%d",&h,&w,&n))
{
if(h>n) h=n;
int a;
build(,h,);
for(i=;i<=n;i++)
{
scanf("%d",&a);
if(node[].sum<a) printf("-1\n");
else printf("%d\n",query(a,));
}
}
}
 #include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
const int maxn=;
int sum[maxn<<];
int n,m,t,h,w;
void pushup(int rt)
{
sum[rt]=max(sum[rt<<],sum[rt<<|]);
}
void build(int l,int r,int rt)
{
sum[rt]=w;
if(l==r) return;
int m=(l+r)>>;
build(lson);
build(rson);
}
int query(int add,int l,int r,int rt)
{
if(l==r)
{
sum[rt]-=add;
return l;
}
int m=(l+r)>>;
int ret;
if(sum[rt<<]>=add)
{
ret=query(add,lson);
}
else ret=query(add,rson);
pushup(rt);
return ret;
}
int main()
{
int i,j,k;
//freopen("1.in","r",stdin);
while(scanf("%d%d%d",&h,&w,&n)!=EOF)
{
if(h>n) h=n;
build(,h,);
for(i=;i<=n;i++)
{
scanf("%d",&k);
if(sum[]<k) printf("-1\n");
else printf("%d\n",query(k,,h,));
}
}
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 线段树单点更新

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

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

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

  4. hdu 2795 线段树

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

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

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

  6. hdu 2795线段树

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

  7. 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 ...

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

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

  9. hdu 3436 线段树 一顿操作

    Queue-jumpers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

随机推荐

  1. DedeCMS全版本通杀SQL注入漏洞利用代码

    EXP: Exp:plus/recommend.php?action=&aid=1&_FILES[type][tmp_name]=\'   or mid=@`\'` /*!50000u ...

  2. ftp的20 21端口和主动被动模式

    ftp只支持tcp连接,不支持udp连接. ftp使用两个端口: 21(控制端口, 命令端口) , 20(数据端口) 21端口:  用来控制用户验证, 连接的建立和关闭:open/close/bye ...

  3. 转15个必须知道的chrome开发者技巧GIF

    在Web开发者中,Google Chrome是使用最广泛的浏览器.六周一次的发布周期和一套强大的不断扩大开发功能,使其成为了web开发者必备的工具.你可能已经熟悉了它的部分功能,如使用console和 ...

  4. tomcat服务器配置及使用

    序:tomcat作为免费开源的web服务器,广受大家喜欢,但是该如何使用此服务器呢?下面就一步一步教大家操作tomcat服务器 一.权限配置 编辑tomcat-users.xml文件配置tomcat服 ...

  5. 如何在Linux命令行中创建以及展示演示稿

    导读 你在准备一场演讲的时候,脑海可能会先被图文并茂.形象华丽的演示图稿所占据.诚然,没有人会否认一份生动形象的演讲稿所带来的积极作用.然而,并非所有的演讲都需要TED Talk的质量.更多时候,演讲 ...

  6. unity3d的四元数 Quaternion

    原地址:http://www.cnblogs.com/88999660/archive/2013/04/02/2995074.html 今天准备学习和研究下unity3d的四元数 Quaternion ...

  7. C++简单使用Jsoncpp来读取写入json文件

    一.源码编译 C++操作json字符串最好的库应该就是jsoncpp了,开源并且跨平台.它可以从这里下载. 下载后将其解压到任意目录,它默认提供VS2003和VS2010的工程文件,使用VS2010可 ...

  8. Powershell常用命令

    Powershell常用命令1.Get-Command 得到Powshell所有命令2.Get-Process 获取所有进程3.Set-Alias 给指定命令重命名 如:Set-Alias aaa G ...

  9. nyoj 8

    http://acm.nyist.net/JudgeOnline/problem.php?pid=8 #include<stdio.h> #include<iostream> ...

  10. How to Configure Nginx for Optimized Performance

    Features Pricing Add-ons Resources | Log in Sign up   Guides & Tutorials Web Server Guides Nginx ...