Pagini recente » Cod sursa (job #2644119) | Cod sursa (job #2627423) | Cod sursa (job #2975179)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("pachete.in");
ofstream g("pachete.out");
int n,xs,ys,nr[10];
struct pct
{
int x,y;
}cadran[5][50015];
bool comp(pct X,pct Y)
{
if(X.x==Y.x)
return X.y<Y.y;
return X.x<Y.x;
}
int sol[50005];
int solve_cadran(int k)
{
if(nr[k]==0)
return 0;
int nr1=0;
sort(cadran[k]+1,cadran[k]+nr[k]+1,comp);
sol[++nr1]=cadran[k][1].y;
for(int i=2;i<=nr[k];i++)
{
int st=1;
int dr=nr1;
int val=cadran[k][i].y;
while(st<=dr)
{
int mj=(st+dr)/2;
if(sol[mj]>val)
st=mj+1;
else
dr=mj-1;
}
if(st>nr1)
nr1++;
sol[st]=val;
}
return nr1;
}
int main()
{
f>>n>>xs>>ys;
for(int i=1;i<=n;i++)
{
int X,Y;
f>>X>>Y;
X-=xs;
Y-=ys;
if(X>=0&&Y>=0)
{
nr[1]++;
cadran[1][nr[1]]={X,Y};
}
else
if(X>=0&&Y<0)
{
nr[2]++;
cadran[2][nr[2]]={X,-Y};
}
else
if(X<0&&Y<0)
{
nr[3]++;
cadran[3][nr[3]]={-X,-Y};
}
else
if(X<0&&Y>=0)
{
nr[4]++;
cadran[4][nr[4]]={-X,Y};
}
}
//g<<nr[1]<<" "<<nr[2];
int ans=0;
for(int k=1;k<=4;k++)
ans+=solve_cadran(k);
g<<ans;
return 0;
}