标签:
Description
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #define lson L,M,po*2 #define rson M+1,R,po*2+1 using namespace std; int COL[40004*4]; int num[20004]; int num1[20004]; int rnum[40004]; int cou; bool vis[10004]; int findH(int x,int L,int R) { int M=(L+R)/2; if(rnum[M]==x) return M; if(rnum[M]<x) return findH(x,M+1,R); else return findH(x,L,M); } void pushDown(int po) { if(COL[po]) { COL[po*2]=COL[po]; COL[po*2+1]=COL[po]; COL[po]=0; } } void update(int ul,int ur,int cha,int L,int R,int po) { if(ul<=L&&ur>=R) { COL[po]=cha; return; } pushDown(po); int M=(L+R)/2; if(ul<=M) update(ul,ur,cha,lson); if(ur>M) update(ul,ur,cha,rson); } void query(int L,int R,int po) { if(L==R) { if(COL[po]) vis[COL[po]]=1; return; } pushDown(po); int M=(L+R)/2; query(lson); query(rson); } int main() { int T,N; int a,b; int ans=0; cin>>T; while(T--) { memset(COL,0,sizeof(COL)); memset(vis,0,sizeof(vis)); scanf("%d",&N); ans=0; for(int i=0;i<N;++i) { scanf("%d %d",&num[i*2],&num[i*2+1]); num1[i*2]=num[i*2]; num1[i*2+1]=num[i*2+1]; } sort(num,num+2*N); rnum[0]=num[0]; cou=1; for(int i=1;i<N*2;++i) { if(num[i]==num[i-1]) continue; if(num[i]-num[i-1]>1) rnum[cou++]=num[i-1]+1; rnum[cou++]=num[i]; } for(int i=0;i<N;++i) { a=findH(num1[i*2],0,cou-1); b=findH(num1[i*2+1],0,cou-1); update(a+1,b+1,i+1,1,cou,1); } query(1,cou,1); for(int i=1;i<=N;++i) if(vis[i]) ++ans; printf("%d\n",ans); } return 0; }
(中等) POJ 2528 Mayor's posters , 离散+线段树。
标签:
原文地址:http://www.cnblogs.com/whywhy/p/4192736.html