zoj 1610
2011-09-08 20:52
155 查看
View Code
#include<stdio.h> #include<string.h> const int MAX=8010; #define L(x) x<<1 #define R(x) x<<1|1 #define MID(x,y) (x+y)>>1 struct { int l,r,col; }node[MAX*4]; int seg[MAX],col[MAX]; void init() { memset(node,0,sizeof(node)); memset(col,-1,sizeof(col)); } void build(int t,int l,int r) { node[t].col=-1; node[t].l=l;node[t].r=r; if(l==r-1) return ; int mid=MID(l,r); build(L(t),l,mid); build(R(t),mid,r); } void update(int t,int l,int r,int col) { if(node[t].l>=l&&node[t].r<=r) { node[t].col=col; return ; } if(node[t].col==col) return ; if(node[t].col>=0)//indicates that this segment is totally covered { node[R(t)].col=node[t].col; node[L(t)].col=node[t].col; node[t].col=-1;//to mark that this segment is not total covered } int mid=MID(node[t].l,node[t].r); if(l>=mid) update(R(t),l,r,col); else if(r<=mid) update(L(t),l,r,col); else { update(L(t),l,mid,col); update(R(t),mid,r,col); } } void query(int t,int l,int r) { if(node[t].col>=0) { for(int i=l;i<r;i++) col[i]=node[t].col; return ; } if(node[t].l==node[t].r-1) return ; int mid=MID(node[t].l,node[t].r); if(l>=mid) query(R(t),l,r); else if(r<=mid) query(L(t),l,r); else { query(L(t),l,mid); query(R(t),mid,r); } } int main() { int i,n,x1,x2,color; while(scanf("%d",&n)==1) { init(); build(1,0,8000); for(i=0;i<n;i++) { scanf("%d%d%d",&x1,&x2,&color); update(1,x1,x2,color); } query(1,0,8000); memset(seg,0,sizeof(seg)); for(i=0;i<MAX;i++) if(col[i+1]!=col[i]&&col[i]!=-1) seg[col[i]]++; for(i=0;i<MAX;i++) if(seg[i]) printf("%d %d\n",i,seg[i]); printf("\n"); } return 0; }
相关文章推荐
- zoj 1610 Count the Colors
- zoj 1610 Count the Colors(线段树)
- ZOJ 1610 Count the Colors(线段树区间更新)
- ZOJ 1610 Count the Colors(线段树——区间更新)(成段染色)
- F - Count the Colors - zoj 1610(区间覆盖)
- 线段树-区间延迟修改-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 线段的涂色
- zoj 1610 Count the Colors
- ZOJ 1610 Count the Colors(线段树——区间更新)(成段染色)
- zoj 1610(线段树染色问题)
- ZOJ 1610 解题报告
- 【线段树】Count the Colors (zoj 1610)
- ZOJ 1610 Count the Colors (线段树 成段更新)
- zoj 1610 Count the Colors 【暴力】