zoj 1610 Count the Colors
2014-08-15 21:06
429 查看
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=610
先用线段树维护区间颜色的覆盖,然后在把区间的颜色映射到数组,再从数组统计颜色。
View Code
先用线段树维护区间颜色的覆盖,然后在把区间的颜色映射到数组,再从数组统计颜色。
#include <cstdio> #include <cstring> #include <algorithm> #define maxn 100000 using namespace std; int n; int min1; struct node1 { int x1,x2,c; }p[maxn]; struct node { int l,r; int cover; }tree[maxn*4]; int vis[maxn]; int colo[maxn]; void build(int i,int l,int r) { tree[i].l=l; tree[i].r=r; tree[i].cover=-1; if(l==r) return ; int mid=(l+r)>>1; build(i<<1,l,mid); build(i<<1|1,mid+1,r); } void down(int i) { if(tree[i].l==tree[i].r) return ; if(tree[i].cover!=-1) { tree[i<<1].cover=tree[i<<1|1].cover=tree[i].cover; tree[i].cover=-1; } } void update(int i,int l,int r,int col) { if(tree[i].l==l&&tree[i].r==r) { tree[i].cover=col; return ; } down(i); int mid=(tree[i].l+tree[i].r)>>1; if(r<=mid) { update(i<<1,l,r,col); } else if(l>mid) { update(i<<1|1,l,r,col); } else { update(i<<1,l,mid,col); update(i<<1|1,mid+1,r,col); } } void search1(int i) { if(tree[i].cover!=-1) { for(int k=tree[i].l; k<=tree[i].r; k++) { vis[k]=tree[i].cover; } return ; } if(tree[i].l==tree[i].r) return; search1(i<<1); search1(i<<1|1); } int main() { while(scanf("%d",&n)!=EOF) { int max1=0,max2=-1; min1=maxn; for(int i=1; i<=n; i++) { scanf("%d%d%d",&p[i].x1,&p[i].x2,&p[i].c); max1=max(max1,p[i].x2); max2=max(max2,p[i].c); min1=min(min1,p[i].c); } build(1,0,max1*2-1); for(int i=0; i<=max1*2; i++) { vis[i]=-1; } for(int i=1; i<=n; i++) { update(1,p[i].x1*2,p[i].x2*2-1,p[i].c); } search1(1); memset(colo,0,sizeof(colo)); for(int i=0; i<=max1*2; i++) { if(vis[i]!=-1) { int mm=vis[i]; colo[mm]++; while(vis[i]==mm&&i<=max1*2) i++; } } for(int i=min1; i<=max2; i++) { if(colo[i]) { printf("%d %d\n",i,colo[i]); } } printf("\n"); } return 0; }
View Code
相关文章推荐
- ZOJ 1610——Count the Colors——————【线段树区间替换、求不同颜色区间段数】
- Zoj 1610 Count the Colors (线段树+区间更新+暴力计数)
- ZOJ 1610 Count the Colors(线段树——区间更新)(成段染色)
- ZOJ 1610 Count the Colors (线段树:区间染色set,整体查询)
- ZOJ 1610 Count the Colors
- ZOJ 1610 Count the Colors (线段树区间更新)
- [ZOJ] 1610 - Count the Colors - 线段树
- ZOJ 1610 Count the Colors(线段树——区间更新)(成段染色)
- zoj 1610 Count the Colors(线段树)(成段更新染色)
- zoj 1610 Count the Colors
- ZOJ 1610 Count the Colors(线段树 区间覆盖)
- Zoj 1610 Count the Colors 详细题解(区间染色,求染色段)
- Count the Colors (ZOJ_1610) 线段树 + 线段统计
- ZOJ 1610 Count the Colors(线段树——区间更新)(成段染色)
- zoj 1610 Count the Colors
- zoj 1610 Count the Colors
- ZOJ 1610 Count the Colors(线段树)
- zoj 1610 Count the Colors 线段树 区间更新
- ZOJ 1610 Count the Colors 【线段树区间更新 + 节点为区间】
- zoj 1610 Count the Colors 线段树区间更新/暴力