POJ 2528 Mayor's posters 线段树 着色问题
2011-09-27 22:51
393 查看
//9368182 NKHelloWorld 2528 Accepted 1180K 79MS C++ 2792B 2011-09-27 22:07:26 //9368188 NKHelloWorld 2528 Accepted 1712K 63MS G++ 2792B 2011-09-27 22:08:48 #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; struct STNODE//线段树中的节点 { int left,right,color; }stree[55000]; struct POINT//离散化专用 { int point,num; bool operator< (const POINT &other)const { return point < other.point; } }point[22000]; struct SEGMENT { int left,right; }segment[11000]; int n,ans; bool visit[22000]; void buildST(int pos,int l,int r)//建树 { stree[pos].left = l; stree[pos].right = r; stree[pos].color = 0; if(l!=r) { buildST(pos+pos,l,(l+r)>>1); buildST(pos+pos+1,(l+r)/2+1,r); } } void insertST(int pos,int l,int r,int color) { int mid; if(stree[pos].left == l && stree[pos].right ==r) { stree[pos].color = color; return ; } if(stree[pos].color > 0 &&stree[pos].color != color) { stree[pos+pos].color = stree[pos].color; stree[pos+pos+1].color = stree[pos].color; stree[pos].color = 0; } mid = (stree[pos].left + stree[pos].right)>>1; if(mid >= r) { insertST(pos+pos,l,r,color); } else if(mid < l) { insertST(pos+pos+1,l,r,color); } else { insertST(pos+pos,l,mid,color); insertST(pos+pos+1,mid+1,r,color); } } void getAns(int pos) { if(stree[pos].color!=0) { if(!visit[stree[pos].color]) { visit[stree[pos].color] = true; ans++; } return ; } getAns(pos+pos); getAns(pos+pos+1); } int main() { int i,j,k,a,b,totcase; scanf("%d",&totcase); while(totcase --) { scanf("%d",&n); //input and Li San Hua for(i=1;i<=n;i++) { scanf("%d%d",&segment[i].left,&segment[i].right); if(segment[i].left > segment[i].right) swap(segment[i].left,segment[i].right); point[i+i-2].point = segment[i].left; point[i+i-2].num = -i; point[i+i-1].point = segment[i].right; point[i+i-1].num = i; } sort(point,point+n+n); int _cnt = 1,_last = point[0].point; for(i=0;i<n+n;i++) { if(point[i].point!=_last) { _cnt++; _last = point[i].point; } if(point[i].num < 0) segment[-point[i].num].left = _cnt; else segment[point[i].num].right = _cnt; } //Li San Hua finish buildST(1,1,_cnt); ans = 0; memset(visit,0,sizeof(visit)); for(i=1;i<=n;i++) { insertST(1,segment[i].left,segment[i].right,i); } getAns(1); printf("%d\n",ans); } return 0; }
相关文章推荐
- POJ 2528——Mayor's posters——————【线段树区间替换、找存在的不同区间】
- POJ 2528 Mayor's posters (线段树,染色问题,离散化要注意)
- poj 2528 Mayor's posters 线段树区间更新
- Poj 2528 Mayor's posters 线段树 离散化 成段更新
- POJ 2528 Mayor's posters 线段树 成段更新
- POJ 2528 Mayor's posters(线段树染色问题+离散化)
- POJ 2528 Mayor's posters 离散化线段树
- (中等) POJ 2528 Mayor's posters , 离散+线段树。
- POJ 2528 Mayor's posters 【线段树(区间为节点问题)】
- (重温)poj 2528 Mayor's posters 线段树 染色+离散化
- POJ 2528 Mayor's posters 线段树+离散化
- poj 2528 Mayor's posters(线段树)
- POJ 2528 Mayor's posters 离散化+线段树
- POJ_2528 Mayor's posters(线段树+离散化)
- POJ 2528 Mayor's posters 线段树
- POJ 2528 Mayor's posters 线段树和离散化
- poj 2528 Mayor's posters【离散化+线段树】
- POJ 2528 Mayor's posters 线段树+离散化
- 线段树2-Mayor's posters-POJ 2528
- POJ 2528 (线段树 离散化) Mayor's posters