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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 驾驶证被扣33分怎么办 a2驾驶员扣33分怎么办 驾驶证被扣48分怎么办 驾照扣了33分怎么办 车辆被扣36分怎么办 车被朋友借走了怎么办 在中国终身禁驾怎么办 c驾驶证忘年审了怎么办 驾驶证脱审1年多怎么办 驾驶证脱审四个月怎么办 驾照b2过期没审怎么办 a照驾照过期没审怎么办 驾照扣60多分怎么办 无证违章被扣分怎么办 变味的牛奶喝了怎么办 孩子喝了坏牛奶怎么办 孕妇喝了坏牛奶怎么办 驾照过期五年了怎么办 科目一没过之后怎么办? 重庆科目一没过怎么办 科三过了没签字怎么办 驾照过期几天撞死人怎么办 办理过期身份时出错了怎么办 新加坡半年临时驾照过期后怎么办 北京怎么办残摩行驶证 报考驾照三年到期了怎么办 车辆违章扣3分怎么办 驾照过期忘审了怎么办 外省港澳证办了居住证怎么办 电动车交警罚单丢了怎么办 在外地开车违章扣分怎么办 郑州车在外地扣分违章怎么办 电工证掉了应该怎么办 毕业回国美国驾照过期了怎么办 a2驾驶证4年没交体检报告怎么办 中国驾照在美国丢了怎么办 拿了驾照不敢开车怎么办 刚拿驾照不敢上路怎么办 雅思考试作文格式写错了怎么办 英国银行卡注销后钱怎么办 本科毕业有毕业证没有学位证怎么办