| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
一模一样的代码G++ AC,C++ WA#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct init
{
int L,R;
};
struct node
{
int L,R;
int mid()
{
return (L+R)/2;
}
bool iscover;
};
init pos[10100];//海报位置信息
int x[20100]; //边界坐标信息
node a[800100];
int Hash[10000100];
void build(int root,int l,int r)
{
a[root].L=l;
a[root].R=r;
a[root].iscover=0;
if(l==r)
return ;
else
{
build(root*2,l,a[root].mid());
build(root*2+1,a[root].mid()+1,r);
}
}
bool post(int root,int l,int r) // return 1 : not cover
{
if(a[root].iscover == 1)
return 0;
if(a[root].L == l && a[root].R ==r)
{
a[root].iscover = 1;
return 1;
}
bool rec;
if(r<=a[root].mid())
rec = post(root*2,l,r);
else if(l>a[root].mid())
rec = post(root*2+1,l,r);
else
{
bool r1=post(root*2,l,a[root].mid());
bool r2=post(root*2+1,a[root].mid()+1,r);
rec = r1||r2;
}
if(a[root*2].iscover && a[root*2+1].iscover)
a[root].iscover=1;
return rec;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
int all=0;
for(int i=0;i<n;i++)
{
scanf("%d%d",&pos[i].L,&pos[i].R);
x[all++]=pos[i].L;
x[all++]=pos[i].R;
}
sort(x,x+all);
all = unique(x,x+all)-x; //qu chong
/*
int hash_num=1;
Hash[x[0]]=1;
for(int i=1;i<all;i++) // li san hua
{
if(x[i]==x[i-1]+1) // important
{
Hash[x[i]]=++hash_num;
}
else
{
Hash[x[i]]=hash_num+2;
hash_num+=2;
}
}
*/
int hash_num=0;
for(int i=0;i<all;i++)
{
Hash[x[i]]=hash_num;
if(i<all-1)
{
if(x[i+1]-x[i]==1)
hash_num++;
else
hash_num+=2;
}
}
int ans=0;
build(1,0,hash_num);
for(int i=n-1;i>=0;i--) //dao xu
if(post(1,Hash[pos[i].L],Hash[pos[i].R]))
ans++;
printf("%d\n",ans);
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator