hdu2795 Billboard(单点更新)
来源:互联网 发布:如何检查网络是否丢包 编辑:程序博客网 时间:2024/05/24 06:19
这里h是宽,w是长,刚开始老是翻不过来。。
然后要想清楚,这里处理的是宽度,所以以宽度作为线段建树。注意优化,因为最坏情况也就每行贴一张告示(告示宽度为1),所以树的最长宽度也就n,不处理这一步,这个树就建不起来,所以运行错误。
#include <stdio.h>#include <algorithm>#include <stdlib.h>#include <string.h>#include <iostream>#include <math.h>using namespace std;typedef long long LL;const int N = 200010;const int INF = 1e8;struct line{ int l; int r; int value;}tree[4 * N];int ans;void build(int i, int l, int r, int val){ tree[i].l = l; tree[i].r = r; tree[i].value = val; if(l == r) { return; } int mid = (l + r) >> 1; build(i*2, l, mid, val); build(i*2+1, mid+1, r, val);}void update(int i, int x){ if(tree[i].l == tree[i].r) { tree[i].value -= x; ans = tree[i].l; return; } if(tree[2*i].value >= x) update(i*2, x);//判断左子树是否可以走 else update(i*2+1, x); tree[i].value = max(tree[i * 2].value, tree[i * 2 + 1].value);}int main(){ // freopen("in.txt", "r", stdin); int h, w, n, x; while(~scanf("%d%d%d", &h, &w, &n)) { if(h > n) h = n; build(1, 1, h, w); ans = -1; for(int i = 0; i < n; i++) { scanf("%d", &x); if(tree[1].value >= x) update(1, x); printf("%d\n", ans); ans = -1; } } return 0;}
0 0
- hdu2795 Billboard(单点更新)
- hdu2795 Billboard(单点更新)
- hdu2795 Billboard --单点更新
- hdu2795 Billboard(线段树,单点更新)
- hdu2795 Billboard (线段树,单点更新)
- HDU2795:Billboard(线段树单点更新)
- HDU2795 Billboard 【线段树】+【单点更新】
- hdu2795 Billboard(线段树单点更新)
- HDU2795 Billboard 线段树 单点更新
- HDU2795 Billboard 线段树单点更新变形
- hdu2795 Billboard 线段树单点更新区间最值
- HDU2795 Billboard(线段树单点更新,区间最大值)
- hdu2795(线段树单点更新)
- hdu2795(线段树单点更新)
- hdu2795 Billboard(线段树)
- HDU2795 Billboard(线段树)
- HDU2795:Billboard(线段树)
- hdu2795 Billboard 线段树区间更新
- Nim(POJ_2975)
- Struts2 S2 – 032远程代码执行漏洞分析报告
- 1004. 成绩排名 (20)
- 第七章数据压缩技术
- 告诉你TestNG annotations注释都是什么时候运行的
- hdu2795 Billboard(单点更新)
- c/c++常用宏、预编译指令
- 等价类
- JQuery EasyUI datagrid 复杂表头处理
- LeetCode 341. Flatten Nested List Iterator(嵌套列表迭代器)
- Linux内核分析总结
- coursera 机器学习课程笔记(一)——回归问题
- 设计模式(十)观察者模式
- iOS视图控制器编程指南 --- 视图控制器所扮演的角色