线段树_HDU_2795
来源:互联网 发布:工厂方法模式java 编辑:程序博客网 时间:2024/04/28 16:34
/*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;}
0 0
- 线段树_HDU_2795
- 线段树?线段树!
- 线段树?线段树!
- 线段_线段树
- 线段_线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- Eclipse IDE 最好使快捷键
- 简单的Java打字游戏
- 1001.害死人不偿命的(3n+1)猜想 (15)
- HDOJ 1711 Number Sequence(KMP简单模板题)
- 来自大数据的反思:需要你读懂的10个小故事
- 线段树_HDU_2795
- git的一些简单用法
- C#文件和文件文件夹按时间、名称排序-顺序与倒序
- 学生管理系统c语言
- EarthWarrior3D游戏ios源码
- 双区间交叉报表的制作
- Oracle 9i 查看执行计划报错 ORA-02402: PLAN_TABLE not found
- 使用Android Studio将开源库发布到Jcenter中央库
- ZOJ 3890 Wumpus (BFS)