HDU2795.Billboard

这个题的意思就是在一块h*w的板子上贴公告,公告的规格为1*w,张贴的时候尽量往上,同一高度尽量靠左,求第n个公告贴的位置所在的行数,如果没有合适的位置贴则输出-1。

因为题意说尽量往上往左,所以线段树存区间的最大值,就是这段区间内的某行是有最大的空位长度,每输入一个长度,就查询子树就可以。

代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<queue>
#include<stack>
using namespace std;
typedef long long ll;
const int maxn=*1e5+;
const int inf=0x3f3f3f3f;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
int h,w,n;
int MAX[maxn<<];
void PushUp(int rt){
MAX[rt]=max(MAX[rt<<],MAX[rt<<|]);
}
void build(int l,int r,int rt){
MAX[rt]=w;
if(l==r)return ;
int m=(l+r)>>;
build(lson);
build(rson);
}
int query(int x,int l,int r,int rt){
if(l==r){
MAX[rt]-=x;
return l;
}
int m=(l+r)>>;
int ret=(MAX[rt<<]>=x)?query(x,lson):query(x,rson);
PushUp(rt);
return ret;
}
int main(){
while(~scanf("%d%d%d",&h,&w,&n)){
if(h>n) h=n;
build(,h,);
while(n--){
int x;
scanf("%d",&x);
if(MAX[]<x)printf("-1\n");
else printf("%d\n",query(x,,h,));
}
}
return ;
}

最新文章

  1. 使用nginx-http-concat添加nginx资源请求合并功能
  2. StringBuffer类的方法
  3. Java二维码登录流程实现(包含短地址生成,含部分代码)
  4. springMVC3学习(八)--全球异常处理
  5. SQL Server 模式和名称解析
  6. 【.NET】XML文件的创建,修改,删除
  7. cocos2d-x 获得系统语言繁体
  8. 通过ssh远程ipython notebook登录使用服务器
  9. Linux指令--/etc/group文件
  10. SublimeText 自带格式化代码功能
  11. Ansible运维工具
  12. VS2013 生成时复制文件或目录到指定目录
  13. Java线程的状态分析
  14. Javascript中点击(click)事件的3种写法
  15. mysql的checkpoint
  16. Silverlight &amp; Blend动画设计系列七:模糊效果(BlurEffect)与阴影效果(DropShadowEffect)
  17. ActiveX界面已显示,调用方法报undefined的处理办法
  18. JS高程3:JSON
  19. 吐血分享:QQ群霸屏技术教程之霸屏实施细则
  20. Quartz,启动不立即执行问题

热门文章

  1. 《Java程序员由笨鸟到菜鸟》
  2. 云计算之路-阿里云上:OCS问题的进展以及11:30-11:50遇到的问题
  3. NOIP 2018 总结
  4. Python 3基础教程3-数学运算
  5. ASP.NET——真假分页
  6. HTTPS和HTTP的区别:
  7. 【bzoj4819】[Sdoi2017]新生舞会 分数规划+费用流
  8. Codeforces 498D Traffic Jams in the Land | 线段树
  9. 解决某些PC站在手机端宽度显示不正常的问题
  10. ZJUTACM