UVa:1232 SKYLINE
来源:互联网 发布:董小飒电竞淘宝店 编辑:程序博客网 时间:2024/05/16 19:14
线段树维护区间最值和区间替换。
1。设setv,maxv,minv分别表示区间替换值和区间最大值和最小值。在找到目标的区间后,如果setv大于当前区间最大值,说明该区间都可以,ans+=L-R+1,同时更新该区间,注意这里maxv和minv都要改成setv。如果setv小于当前区间最小值,那就没有必要更新了,就中断update。其他情况就继续下传。
2。结点信息下传的时候,minv要取该段区间的setv和minv的较大值。
3。结点信息上传的时候,minv维护最小值,maxv维护最大值。
4。原来的线段树中的点表示的是线段,这里是点。所以右端点需要自减一。
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <cmath>#include <vector>#include <queue>#include <set>#include <map>#include <algorithm>#define ll long long#define INF 2139062143#define inf -2139062144#define MOD 20071027#define MAXN 30#define LEN 111111<<2using namespace std;int ans;struct Line_Tree{private: int setv[LEN],maxv[LEN],minv[LEN]; int sz,ql,qr,sv; void PushUp(int o) { maxv[o]=max(maxv[o<<1],maxv[o<<1|1]); minv[o]=min(minv[o<<1],minv[o<<1|1]); } void Pushdown(int o) { if(setv[o]) { setv[o<<1]=setv[o]; setv[o<<1|1]=setv[o]; maxv[o<<1]=max(maxv[o<<1],setv[o<<1]); maxv[o<<1|1]=max(maxv[o<<1|1],setv[o<<1|1]); minv[o<<1]=max(minv[o<<1],setv[o<<1]); minv[o<<1|1]=max(minv[o<<1|1],setv[o<<1|1]); setv[o]=0; } } void myupdate(int o,int L,int R) { if(ql<=L&&R<=qr) { if(sv>=maxv[o]) { ans+=R-L+1; setv[o]=sv; maxv[o]=sv; minv[o]=sv; return ; } if(sv<=minv[o]||L==R) return ; } Pushdown(o); int M=(L+R)>>1; if(ql<=M) myupdate(o<<1,L,M); if(M<qr) myupdate(o<<1|1,M+1,R); PushUp(o); }public: void init(int n) { sz=n; memset(setv,0,sizeof(setv)); memset(maxv,0,sizeof(maxv)); memset(minv,0,sizeof(minv)); } void update(int a,int L,int R) { sv=a; ql=L; qr=R; myupdate(1,1,sz); }};Line_Tree tree;int main(){ int T; scanf("%d",&T); int n; while(scanf("%d",&n)!=EOF&&n) { tree.init(100000); ans=0; int x,y,z; for(int i=0; i<n; ++i) { scanf("%d%d%d",&x,&y,&z); tree.update(z,x,y-1); } printf("%d\n",ans); } return 0;}
0 0
- UVa:1232 SKYLINE
- Uva 1232 SKYLINE
- UVA 1232 - SKYLINE
- UVA 1232 - SKYLINE
- UVA 1232 - SKYLINE(线段树)
- uva 1232 - SKYLINE(线段树)
- UVA 1232 Skyline (线段树)
- 【UVA】1232 - SKYLINE(线段树减枝)
- UVA 105 Skyline Problem
- UVA 1232 - SKYLINE(线段树区间更新)
- UVa 1232 SKYLINE (线段树区间修改)
- 1232 - SKYLINE
- 1232 - SKYLINE
- UVa Problem 105 - Skyline Problem
- UVA 105 - The Skyline Problem
- UVa 105 - The Skyline Problem
- UVA 105 - The Skyline Problem
- Uva 11790 - Murcia's Skyline
- android调用第三方地图(URI)
- 第一笔
- MySQL主从复制与读写分离
- 位运算简介及实用技巧(二):进阶篇(1)
- 位运算简介及实用技巧(三):进阶篇(2)
- UVa:1232 SKYLINE
- 【翻译】“PE文件格式”1.9版 完整译文(附注释)
- 【Leetcode】Valid Palindrome
- 虚幻引擎4(Unreal Engine 4/UE4)正式发布!每月19美元
- 位运算简介及实用技巧(四):实战篇
- 人的健康一天之中最重要的时刻
- poj 1989 The Cow Lineup 最短非子序列问题
- Jquery插件--easyUI属性汇总
- Codeforces Round #136 (Div. 2) D. Little Elephant and Array