UVa 1232 SKYLINE (线段树区间修改)
来源:互联网 发布:中文域名 编辑:程序博客网 时间:2024/05/18 11:32
题目链接:http://vjudge.net/problem/UVA-1232
大意:有一个序列,开始时全为零。现有一些操作,将区间[l,r)上小于等于c的数全部改为c,求总修改次数。
思路:很容易想到考查的是线段树区间修改,怎么做呢,其实只要对线段树模板的边界代码稍微修改下即可。在进行更新时,如果待更新区间覆盖了当前区间,那么这个当前区间有三种情况:还未进行过赋值(即全为0,这时的标记为-1)、已经进行过赋值但没有更新到子结点(此时的标记即为c)、已经进行过赋值并以更新到子结点(这时的标记为-2)。
对于第一种情况,直接赋值并更新答案即可;第二种也类似,如果c大于等于当前的标记则赋值并更新答案;而第三种,由于并不知道子结点的具体数值,所以要继续向下递归。
#include<cstdio>#include<cstring>#include<vector>#include<algorithm>#include<iostream>#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using namespace std;const int maxn = 100000 + 5;int setv[maxn<<2],minv[maxn<<2],ans;void PushUp(int rt){ minv[rt] = min(minv[rt<<1],minv[rt<<1|1]);}void PushDown(int rt){ if (setv[rt] >= 0) { setv[rt<<1] = setv[rt<<1|1] = setv[rt]; minv[rt<<1] = minv[rt<<1|1] = setv[rt]; setv[rt] = -2; }}void build(int l, int r, int rt){ if (l == r) { setv[rt] = -1; minv[rt] = 0; return; } int m = (l + r) >> 1; build(lson); build(rson); PushUp(rt);}void update(int ql, int qr, int h, int l, int r, int rt){ if (minv[rt] > h) return; if (ql <= l && r <= qr) { if (h >= setv[rt] && setv[rt] != -2) { ans += r-l+1; setv[rt] = minv[rt] = h; return; } } PushDown(rt); int m = (l + r) >> 1; if (ql <= m) update(ql,qr,h,lson); if (m < qr) update(ql,qr,h,rson); PushUp(rt);}int main(){ int T; scanf("%d",&T); while(T--) { build(1,maxn,1); setv[1] = 0; ans = 0; int n; scanf("%d",&n); while(n--) { int a,b,c; scanf("%d%d%d",&a,&b,&c); update(a,b-1,c,1,maxn,1); } printf("%d\n",ans); } return 0;}
0 0
- UVa 1232 SKYLINE (线段树区间修改)
- UVA 1232 - SKYLINE(线段树区间更新)
- SKYLINE uva+线段树+区间的修改+lazy标记
- UVALive - 4108 SKYLINE (线段树的区间修改)
- UVALive - 4108 SKYLINE 线段树(区间修改)
- UVALive 4108 SKYLINE(线段树区间修改)
- UVA1232 - SKYLINE(线段树区间修改)
- UVA 1232 - SKYLINE(线段树)
- uva 1232 - SKYLINE(线段树)
- UVA 1232 Skyline (线段树)
- 【UVA】1232 - SKYLINE(线段树减枝)
- UVALive 4108 SKYLINE(线段树区间更新)
- 线段树(2):区间修改 (uva 11992 FastMatrixOperations)
- 线段树(区间修改,区间查询)
- *线段树(区间修改)
- 线段树(区间修改)
- POJ 2528 & UVA 10587(线段树+离散+区间修改)
- Fast Matrix Operations uva+线段树区间修改
- js 创建对象的七种模式
- Android中布局
- Uva Ducci Sequence(map映射的哈希表)
- 仿知乎日报第一篇:导入库
- app 上线流程
- UVa 1232 SKYLINE (线段树区间修改)
- MySQL单表百万数据记录分页性能优化
- 用POI实现导出Excel表格的后台java代码
- 微擎之手机页面向下滑动加载更多
- suricata 3.1 源码分析16 (流管理1)
- Minifilter的动态安装、加载及卸载
- 个人关于BaseServlet的见解
- static SimpleClass()
- linux下执行.sh文件的方法和语法