1019.Line Painting(线段树 离散化)
2013-09-23 13:25
316 查看
1019
离散化都忘记怎么写了 注意两个端点 离散化后用线段树更新区间 混色为-1 黑为2 白为1 因为N不大 最后直接循环标记这一段的颜色查找
View Code
离散化都忘记怎么写了 注意两个端点 离散化后用线段树更新区间 混色为-1 黑为2 白为1 因为N不大 最后直接循环标记这一段的颜色查找
#include <iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<stdlib.h> using namespace std; #define N 100010 #define LL long long struct node { int d,id; char c; }li[N<<1]; int q [3],pp ; int s[N<<2],cnt ,cc ; void build(int l,int r,int w) { s[w] = 1; if(l==r-1) { return ; } int m = (l+r)>>1; build(l,m,w<<1); build(m,r,w<<1|1); } void update(int a,int b,int d,int l,int r,int w) { if(a<=l&&b>=r) { s[w] = d; return ; } if(l==r-1) return ; if(s[w]>0&&s[w]!=d) { s[w<<1] = s[w<<1|1] = s[w]; s[w] = -1; } int m = (l+r)>>1; if(a<=m) update(a,b,d,l,m,w<<1); if(b>m) update(a,b,d,m,r,w<<1|1); } void query(int l,int r,int w) { int i; if(s[w]>0) { for(i = l ; i < r; i++) cnt[i] = s[w]; return ; } if(l==r-1) return ; int m = (l+r)>>1; query(l,m,w<<1); query(m,r,w<<1|1); } bool cmp(node a,node b) { return a.d<b.d; } int main() { int i,n; char c[10]; scanf("%d",&n); for(i = 0 ; i < n ; i++) { scanf("%d%d%s",&q[i][0],&q[i][1],c); if(c[0]=='b') cc[i+1] = 2; else cc[i+1] = 1; li[2*i].d = q[i][0]; li[2*i].id = -(i+1); li[2*i+1].d = q[i][1]; li[2*i+1].id = i+1; } sort(li,li+2*n,cmp); int tt = li[0].d,g=1; for(i = 0 ; i < 2*n ; i++) { if(li[i].d!=tt) { g++; tt = li[i].d; } if(li[i].id<0) { q[-li[i].id][0] = g; pp[g] = li[i].d; } else { q[li[i].id][1] = g; pp[g] = li[i].d; } } build(0,g,1); for(i = 0; i <= g ; i++) cnt[i] = 1; for(i = 1 ; i <= n ; i++) { update(q[i][0],q[i][1],cc[i],0,g,1); } query(0,g,1); int maxz=0,ss,ee,ts,te; cnt[0] = 1; cnt[g+1] = 1; pp[g+1] = 1000000000; for(i = 0 ; i <= g ; i++) { if(cnt[i]!=1) continue; ss = pp[i]; while(cnt[i]==1&&i<=g) i++; ee = pp[i]; if(ee-ss+1>maxz) { ts = ss; te = ee; maxz = ee-ss+1; } } printf("%d %d\n",ts,te); return 0; }
View Code
相关文章推荐
- Ural 1019 A Line painting(线段树,成段更新离散化)
- URAL - 1019 - Line Painting(离散化+线段树)
- ural 1019 Line Painting(线段树)
- Ural_1019. Line Painting(线段树)
- ural 1019 Line Painting 线段树 区间染色
- URAL 1019. Line Painting (线段树)
- ural 1019 Line Painting (线段树)
- poj 2528 数的离散化+线段树
- pku2528 线段树(离散化)
- http://acm.hdu.edu.cn/showproblem.php?pid=1255 扫描线 + 线段树 +离散化
- hihoCoder:#1079(线段树+离散化)
- CDOJ 1335-求恰好k次覆盖矩形面积并- (线段树 扫描线 离散化)
- poj 2528 Mayor's posters(线段树+离散化)
- [牛客网#35D 树的距离]离散化+线段树合并
- poj 2528 Mayor's posters(线段树+离散化)
- zoj zju 3324 线段树 离散化
- HDU 1542 Atlantis (线段树 + 扫描线 + 离散化)
- cd 915E(离散化+线段树)(新线段树模板)
- poj—2528Mayor's posters-线段树+区间离散化
- 51Nod 1019树状数组离散化