线段树_HDU_2795
2015-07-28 09:32
381 查看
/* h*w的广告牌,每次尽可能选上面贴,尽可能靠左贴,问给定的广告长度中,应该在第几行 我应该可以令根节点等于宽度,区间值为区间内能放的最大宽度,尽可能高度10^9,然而广告条数 只有n=200000,因此高度只要在n之内就好了 */ #include<iostream> #include<cstdio> #include<cstring> const int maxn = 200020; using namespace std; int tree[maxn<<2]; void work(int rt) { tree[rt] = max(tree[rt<<1],tree[rt<<1|1]); } void build(int l,int r, int rt,int val) { if(l == r) { tree[rt] = val; return; } int mid = (l+r)>>1; build(l,mid,rt<<1,val); build(mid+1,r,rt<<1|1,val); work(rt); } int updata(int l ,int r, int rt,int val) { int flag = -1; if(l == r) { if(tree[rt]>=val) { tree[rt]-=val; return l; } return -1; } int mid = (l+r)>>1; if(tree[rt<<1]>=val)flag = updata(l,mid,rt<<1,val); else if(tree[rt<<1|1]>=val)flag = updata(mid+1,r,rt<<1|1,val); work(rt); return flag; } int main() { int h,w,n,len,po; while(scanf("%d%d%d",&h,&w,&n)!=EOF) { po = h>n?n:h; build(1,po,1,w); for(int i = 0; i < n; i++) { scanf("%d",&len); printf("%d\n",updata(1,po,1,len)); } } return 0; }
相关文章推荐
- 阿里面试经历JAVA总结
- Thread.currentThread().getContextClassLoader()与Test.class.getClassLoader()区别
- ZOJ 3888 Twelves Monkeys (预处理+优先队列)
- leetCode 94.Binary Tree Inorder Traversal(二叉树中序遍历) 解题思路和方法
- iOS开发遇到的坑之一: 开发遇见如下错误:Undefined symbols for architecture arm64
- layout_height和height的区别-附match-parent和fill_parent的区别
- java常用的23种设计模式《转》
- Android--利用ViewFlipper实现屏幕切换动画效果
- @产品经理的定位
- leetCode 95.Unique Binary Search Trees II (唯一二叉搜索树) 解题思路和方法
- java playframework
- 嵌入式Linux开发教程:Linux常见命令(上篇)
- jfreechart中文乱码解决办法总结
- Java对数组的复制
- jquery 操作各种元素
- HDUOj 看病要排队 优先队列的使用 题目1873
- js中我定义一个var变量,在页面想显示出来,用什么东西显示比较好,var比较长还有空格
- 差分约束 [1](poj 3159)(简单)
- 转 iOS项目的完整重命名方法图文教程
- poj 2349 Arctic Network