hdu 2795 Billboard 线段树 点更新
来源:互联网 发布:腾讯视频数据分析 编辑:程序博客网 时间:2024/06/05 00:26
// hdu 2795 Billboard 线段树 点更新//// 首先n最多是200000种,也就是说最多200000行,// 我们的线段树的区间保存的是L到R中最大的叶子节点的值// 初始情况下都是板子的宽度。这样,每次放一块广告的时候// 看1到h中最左边的叶子区间是什么就ok了,还是很好理解的//// 做题的感悟,这道题其实是去年暑假集训的时候做的,当时// 并不会,只会敲模板,并不理解。所以学的很痛苦,现在// 捡起来,感觉是那么的怀旧啊。看自己以前的代码,有种// 时光倒流的感觉。当初不太懂的东西,现在开始有点懂了// 现在不懂的东西,只要认真学认真看,将来还是能懂一点的// 继续练#include <algorithm>#include <bitset>#include <cassert>#include <cctype>#include <cfloat>#include <climits>#include <cmath>#include <complex>#include <cstdio>#include <cstdlib>#include <cstring>#include <ctime>#include <deque>#include <functional>#include <iostream>#include <list>#include <map>#include <numeric>#include <queue>#include <set>#include <stack>#include <vector>#define ceil(a,b) (((a)+(b)-1)/(b))#define endl '\n'#define gcd __gcd#define highBit(x) (1ULL<<(63-__builtin_clzll(x)))#define popCount __builtin_popcountlltypedef long long ll;using namespace std;const int MOD = 1000000007;const long double PI = acos(-1.L);const int maxn = 2e5 + 9;int block[maxn<<2];int h,w,n;void push_up(int ro){block[ro] = max(block[ro * 2],block[ro * 2 + 1]);}void build(int ro,int L,int R){if ( L == R ){block[ro] = w;return ;}int M = L + ( R - L ) / 2;build(ro * 2,L,M);build(ro * 2 + 1,M + 1,R);push_up(ro);}int p,v;int query(int ro,int L,int R){if (L==R){if (block[ro]>=p){block[ro] -= p ;return L;}return -1;}int ans = 0;int M = L + ( R - L ) / 2;//ans = query(ro * 2,L,M);这里先尝试左边,没有必要,而且这样会超时//if (ans < 0){我们保存的就是L到R之间最大的叶子节点的值//ans = query(ro * 2 + 1,M+1,R); 直接用block[ro * 2]就可以了//}if (block[ro * 2] >= p)ans = query(ro * 2,L,M);elseans = query(ro * 2 + 1,M+1,R);push_up(ro);return ans;}void init(){if ( h > n )h = n;build(1,1,h);for (int i=0;i<n;i++){int x;scanf("%d",&x);p = x;printf("%d\n",query(1,1,h));}}int main() {//freopen("G:\\Code\\1.txt","r",stdin);while(scanf("%d%d%d",&h,&w,&n)!=EOF){init();}return 0;}
0 0
- hdu 2795 Billboard 线段树 点更新
- HDU 2795 Billboard(线段树点更新)
- HDU 2795 Billboard 线段树 顺序点更新
- HDU-2795-Billboard(线段树 点更新求最值)
- HDU 2795 Billboard [线段树-单点更新]
- hdu 2795 Billboard 线段树 单点更新
- HDU 2795 Billboard / 线段树单点更新
- HDU-2795 Billboard 线段树单点更新
- hdu 2795 Billboard 线段树 单点更新
- hdu 2795 Billboard (线段树,单点更新)
- HDU-2795-Billboard-线段树单点更新
- HDU 2795 Billboard // 线段树 单点更新
- HDU 2795 Billboard 线段树单点更新
- HDU 2795 Billboard 线段树单点更新
- 线段树练习[单点更新] HDU 2795 Billboard
- HDU 2795 Billboard (线段树单点更新)
- HDU 2795 Billboard (线段树单点更新)
- HDU 2795 Billboard (线段树 单点更新 区间求最大值)
- 【教材】 用Cheat Engine查找特殊码(简易版)
- Valid Parentheses
- SQLite数据库框架ORMLite与GreenDao的简单比较
- 随笔
- 1244的起源
- hdu 2795 Billboard 线段树 点更新
- 工程Makefile实例
- Microsoft Visual Studio 2010 如何添加控制台调试信息
- GreenDao官方文档翻译
- Hadoop文件解压缩
- Android的ScrollView和HorizontalScrollView-android学习之旅(四十一)
- mysql 架构与概念
- Structs 整合Spring
- zerglurker的C语言教程001——开发环境搭建