线段树专题#6_蒟蒻训练历程记录_HDU 2705 Billboard_单点更新
来源:互联网 发布:c语言获取开机时间 编辑:程序博客网 时间:2024/06/05 01:54
这道题,很水的啦。。然而楼猪制杖,真的宛若制杖,居然把向上更新的函数写成了两个子节点的和,WA了几发愣是没有发现。。。ORZ制杖专卖,假一罚十!
唯一的坑点就是必须现在公告板的高度和小纸片的个数里面取最小值,否则数组会越界了。。1e9ORZ就爆了。以下是AC代码:
声明:本人蒟蒻,本系列博客为了勉励更多的初学者,在学习算法的路上越走越远欧耶╰( ̄▽ ̄)╭
#pragma comment(linker, "/STACK:1024000000,1024000000")#include<iostream>#include<cstdlib>#include<cstdio>#include<cmath>#include<cstring>#include<vector>#include<map>#include<algorithm>#include<queue>#include<stack>//线段树单点更新查询,这道去年不会的超级难题,现在竟然感觉很简单 using namespace std;typedef long long ll;#define N 200010int g[4*N];int h, w, n, key;void init(int rt, int l, int r){if(l == r){g[rt] = w;return;}int mid = (l+r)>>1;init(rt<<1, l, mid);init(rt<<1|1, mid+1, r);g[rt] = max(g[rt<<1], g[rt<<1|1]);}void Update(int rt, int l, int r, int x){if(l == r){if(g[rt] >= x){g[rt] -= x;//printf("l:%d g[rt]:%d\n", l, g[rt]);key = l;}return;}int mid = (l+r)>>1;if(g[rt<<1] >= x)Update(rt<<1, l, mid, x);elseUpdate(rt<<1|1, mid+1, r, x);g[rt] = max(g[rt<<1], g[rt<<1|1]);}int main(){while(~scanf("%d%d%d", &h, &w, &n)){h = min(h, n);init(1, 1, h);while(n--){int tt;key = -1;scanf("%d", &tt);Update(1, 1, h, tt);printf("%d\n", key);}} return 0;}
0 0
- 线段树专题#6_蒟蒻训练历程记录_HDU 2705 Billboard_单点更新
- 线段树专题#5_蒟蒻训练历程记录_HDU 1394 Minimum Inversion Number_单点更新+思维转换
- 线段树专题#4_蒟蒻训练历程记录_HDU1698_ 延迟标记、区间更新
- 线段树专题#1_蒟蒻训练历程记录_HDU1166
- 线段树专题#2_蒟蒻训练历程记录_HDU5775
- 线段树专题#3_蒟蒻训练历程记录_HDU1754_I hate It
- 线段树_单点更新
- 线段树专题 A(单点更新)
- hdu_1166_线段树_单点更新_区间求和
- 线段树专题训练
- 线段树专题训练
- POJ训练计划2299_Ultra-QuickSort(线段树/单点更新)
- POJ训练计划2828_Buy Tickets(线段树/单点更新)
- 线段树 单点更新
- 线段树单点更新
- 线段树 单点更新
- 单点更新线段树
- 线段树单点更新
- 冒泡排序
- Base64编码
- 快速体验MyCAT
- 判断回文
- 守护进程二三事与Supervisor
- 线段树专题#6_蒟蒻训练历程记录_HDU 2705 Billboard_单点更新
- 顺序查找法
- 剑指offer——从尾到头打印链表
- JavaScipt基本教程之JavaScript语言的基础
- 解决win10系统 L2TP连接尝试失败:ERROR因为安全层在初始化与远程计算机的协商时遇到了一个处理错误
- NSURLSession用法示例及断点续传视频的实现
- 选择排序
- Android加载动画系列—— LineWithTextLoadingAnim
- 找最小值