Pagini recente » Cod sursa (job #2308468) | Cod sursa (job #2836844) | Cod sursa (job #477041) | Cod sursa (job #1780183) | Cod sursa (job #1133550)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("pachete.in");
ofstream fout ("pachete.out");
int di[]={-1,-1,1,1};
int dj[]={1,-1,1,-1};
int n,xi,yi,k,sol,rez,D,i,p,u,mij,d[50005];
struct data1{
int x;
int y;
}v[50005];
struct data2{
int x;
int y;
}cadran[50005];
int cmp (data2 a, data2 b) {
if (a.x!=b.x)
return a.x<b.x;
else
return a.y<b.y;
}
int main () {
fin>>n>>xi>>yi;
for (i=1;i<=n;i++) {
fin>>v[i].x>>v[i].y;
v[i].x-=xi;
v[i].y-=yi;
}
for (D=0;D<=3;D++) {
k=0;sol=0;
for (i=1;i<=n;i++) {
if (v[i].x*di[D]>=0 && v[i].y*dj[D]>=0) {
cadran[++k].x=v[i].x*di[D];
cadran[k].y=v[i].y*dj[D];
}
}
sort (cadran+1,cadran+k+1,cmp);
if (k!=0){
d[0]=-1;
d[++sol]=1;
}
for (i=2;i<=k;i++) {
p=1;u=sol;
while (p<=u) {
mij=(p+u)/2;
if (cadran[d[mij]].y>=cadran[i].y)
p=mij+1;
else
u=mij-1;
}
d[p]=i;
if (p>sol)
sol++;
}
rez+=sol;
}
fout<<rez<<"\n";
return 0;
}