标签:os io for amp line size ios sp
#include<iostream> #include<map> #include<string> #include<cstring> #include<cstdio> #include<cstdlib> #include<cmath> #include<queue> #include<vector> #include<algorithm> using namespace std; bool cmp(int a,int b) { return a<b; } struct node { int l,r; }line[10010]; struct node1 { int l,r,m,w; }tree[80010]; void create(int l,int r,int k) { tree[k].l=l; tree[k].r=r; tree[k].m=(l+r)>>1; tree[k].w=0; if(l==r) return; create(l,tree[k].m,k<<1); create(tree[k].m+1,r,k<<1|1); } void join(int l,int r,int w,int k) { if(tree[k].l==l&&tree[k].r==r) { tree[k].w=w; return; } if(tree[k].w>0) { tree[k<<1].w=tree[k<<1|1].w=tree[k].w; tree[k].w=-1; } else if(tree[k].w==0) tree[k].w=w; if(r<=tree[k].m) join(l,r,w,k<<1); else if(l>tree[k].m) join(l,r,w,k<<1|1); else { join(l,tree[k].m,w,k<<1); join(tree[k].m+1,r,w,k<<1|1); } } void in() { int n,i,l,r; cin>>n; vector<int>v; for(i=0;i<n;i++) { cin>>line[i].l>>line[i].r; v.push_back(line[i].l);v.push_back(line[i].r); } sort(v.begin(),v.end(),cmp); v.erase(unique(v.begin(),v.end()),v.end()); create(1,v.size(),1); for(i=0;i<n;i++) { l=lower_bound(v.begin(),v.end(),line[i].l)-v.begin()+1; r=lower_bound(v.begin(),v.end(),line[i].r)-v.begin()+1; join(l,r,i+1,1); } } int ans; bool vis[20010]; void find(int k) { if(tree[k].w!=-1) { if(!vis[tree[k].w]) { ans++; vis[tree[k].w]=1; } return; } find(k<<1); find(k<<1|1); } int main() { int exp; cin>>exp; while(exp--) { in(); ans=0; memset(vis,0,sizeof(vis)); find(1); cout<<ans<<endl; } }
离散化坐标然后线段树解poj2528Mayor's posters,布布扣,bubuko.com
离散化坐标然后线段树解poj2528Mayor's posters
标签:os io for amp line size ios sp
原文地址:http://blog.csdn.net/stl112514/article/details/38535329