poj 2528 Mayor's posters
2011-12-03 09:51
369 查看
这题纠结了我两天,终于AC了,在网上说有个bug,
普通的离散化会下面这组数据会过不了
1 10
1 4
6 10
普通的离散化结果是2。
但是真正的答案是3。
这是我的代码,要离散的是边界的编号,而不是区间的编号!
普通的离散化会下面这组数据会过不了
1 10
1 4
6 10
普通的离散化结果是2。
但是真正的答案是3。
这是我的代码,要离散的是边界的编号,而不是区间的编号!
#include<stdio.h> #include<algorithm> using namespace std; const int Max=20005; int ans,m,n; int pos[Max]; bool visit[Max]; struct node { int r,l,flag; }tree[Max*4]; struct lnode { int l,r; }s[Max]; void build(int step,int l,int r) { tree[step].l=l; tree[step].r=r; tree[step].flag=-1; if(l+1==r) { return ; } int mid=(l+r)>>1; build(step<<1,l,mid); build((step<<1)|1,mid,r); } void insert(int step,int l,int r,int x) { if(tree[step].l==l&&tree[step].r==r) { tree[step].flag=x; return ; } if(tree[step].flag!=-1) { tree[step<<1].flag=tree[step].flag; tree[(step<<1)|1].flag=tree[step].flag; tree[step].flag=-1; } int mid=(tree[step].l+tree[step].r)>>1; if(r<=mid) { insert(step<<1,l,r,x); } else { if(mid<=l) { insert(step<<1|1,l,r,x); } else { insert(step<<1,l,mid,x); insert((step<<1)|1,mid,r,x); } } } void compute(int step) { if(tree[step].flag!=-1) { if(visit[tree[step].flag]) { ans++; visit[tree[step].flag]=false; } return ; } if(tree[step].l+1==tree[step].r) return ; compute(step<<1); compute((step<<1)|1); } int search(int x) { int low=0,high=m,mid; while(low<=high) { mid=(low+high)>>1; if(pos[mid]==x) return mid; else if(pos[mid]>x) high=mid-1; else low=mid+1; } return -1; } int main() { int t,i,n,x,y,a,b; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d%d",&a,&b); b++; s[i].l=a; s[i].r=b; pos[i<<1]=a; pos[(i<<1)|1]=b; } sort(pos,pos+n*2); m=ans=0; for(i=1;i<2*n;i++) { if(pos[m]!=pos[i]) { pos[++m]=pos[i]; } } build(1,0,m); for(i=0;i<n;i++) { x=search(s[i].l); y=search(s[i].r); insert(1,x,y,i); } memset(visit,true,sizeof(visit)); compute(1); printf("%d\n",ans); } return 0; }
相关文章推荐
- POJ 2528 Mayor's posters(线段树区间修改+离散化)
- POJ 2528 Mayor&#39;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(线段树)
- POJ_2528_Mayor's posters