Billboard (HDU 2795)

Hdu 2795

注意到每个广告的长度是1,因此可以将每这一张广告牌当成一个数列表示,每个初始值为w。使用线段树维护这个数列,每次查询为找到这个数列第一个大于等于x的位置,每次修改操作为将找到的位置值-x

线段树功能:区间查询+单点更新

#include <cstdio>
#include <utility>
#include <queue>
#include <cstring>
#define scan(x) scanf("%d",&x)
#define scan2(x,y) scanf("%d%d",&x,&y)
#define lson rt<<1,l,mid
#define rson rt<<1|1,mid+1,r
#define root 1,1,h
using namespace std;
const int Max=2e5+10;
int sum[Max<<2];
int h,w,n;
void Pushup(int rt)
{
sum[rt]=max(sum[rt<<1],sum[rt<<1|1]);
}
void Build(int rt,int l,int r)
{
if(l==r)
{
sum[rt]=w;
return;
}
int mid=(l+r)>>1;
Build(lson);
Build(rson);
Pushup(rt);
}
int Query(int x,int rt,int l,int r)
{
if(l==r)
{
sum[rt]-=x;
return l;
}
int mid=(l+r)>>1,ret;
if(sum[rt<<1]>=x) ret=Query(x,lson);
else ret=Query(x,rson);
Pushup(rt);
return ret;
}
int main()
{
while(~scanf("%d%d%d",&h,&w,&n))
{
if(h>n) h=n;
Build(root);
int x;
for(int i=0;i<n;i++)
{
scan(x);
if(sum[1]<x) printf("-1\n");
else
{
printf("%d\n",Query(x,root));
}
}
}
return 0;
}

最新文章

  1. 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间
  2. HTTP状态码(2xx,3xx,4xx,5xx)
  3. sencha touch+phonegap+node.js打包
  4. 调用shell脚本,IP处理
  5. SignalR的安装
  6. Android IOS WebRTC 音视频开发总结(二十)-- 自由职业
  7. Objective-C 【动态类型检测&amp;响应方法】
  8. hdu Train Problem I(栈的简单应用)
  9. poj2924---高斯求和
  10. Nodejs的运行原理-模块篇
  11. java注解之二
  12. Android高级控件(一)——ListView绑定CheckBox实现全选,增加和删除等功能
  13. v-model
  14. 课下作业——MyCP
  15. SpringBoot系列: 理解 Spring 的依赖注入(二)
  16. [Unity算法]点是否在多边形范围内
  17. Mybatis中,当插入数据后,返回最新主键id的几种方法,及具体用法
  18. 集合框架(TreeSet原理)
  19. expect 批量执行命令
  20. UITableView简述

热门文章

  1. ODB——基于c++的ORM映射框架尝试(使用)
  2. openstack cluster 封装
  3. ubuntu 16.04 Eclipse 图标显示为 ?(已解决)
  4. jquery input 赋值和取值
  5. 技嘉,u盘安装win7,提示“找不到驱动器设备驱动程序”
  6. 04-Vue中的动画
  7. [NOIP2004]火星人
  8. Android项目模块化遇到的问题
  9. 51nod 1029 大数除法
  10. ACM_抢糖果