#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
#define MAX(x,y) ((x)>(y)?(x):(y))
int vis[25010];
struct node
{
int id;
int init,min,max;
node() {}
node(int a,int b,int c,int d):id(a),init(b),min(c),max(d)
{}
};
bool cmp(node a,node b)
{
if(a.init!=b.init)
return a.init<b.init;
else
if(a.min!=b.min)
return a.min<b.min;
else
return a.max<b.max;
}
int main()
{
int n,a,b,c,d,i,res=0,up,right;
vector<node>ex,ey;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d%d%d%d",&a,&b,&c,&d);
ey.push_back(node(i,b,a,c));
ey.push_back(node(i,d,a,c));
ex.push_back(node(i,a,b,d));
ex.push_back(node(i,c,b,d));
}
int numx=ex.size();
int numy=ey.size();
sort(ex.begin(),ex.end(),cmp);
sort(ey.begin(),ey.end(),cmp);
up=ey[0].max;
for(i=1;i<numy;i++)
{
if(ey[i].init==ey[i-1].init)
{
if(up>=ey[i].min)
{
vis[ey[i].id]=vis[ey[i-1].id]=1;
}
}
else
up=ey[i].max;
up=MAX(up,ey[i].max);
}
up=ex[0].max;
for(i=1;i<numx;i++)
{
if(ex[i].init==ex[i-1].init)
{
if(up>=ex[i].min)
{
vis[ex[i].id]=vis[ex[i-1].id]=1;
}
}
else
{
up=ex[i].max;
}
up=MAX(up,ex[i].max);
}
for(i=0;i<n;i++)
if(!vis[i])
res++;
printf("%d\n",res);
return 0;
}
poj 3168 计算几何
最新推荐文章于 2018-04-16 21:02:00 发布