Pagini recente » Cod sursa (job #2414617) | Cod sursa (job #1108704) | Cod sursa (job #2621627) | oji_10_2024 | Cod sursa (job #14195)
Cod sursa(job #14195)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NMAX 50000
FILE *f = fopen("pachete.in","rt"), *g = fopen("pachete.out","wt");
long long n,i,j,k,a[NMAX][2],x,y,b[NMAX][2],ord[NMAX],cy[NMAX],sol,pack[NMAX];
void citire()
{
fscanf(f,"%lld",&n);
fscanf(f,"%lld %lld",&x,&y);
for (i=1;i<=n;i++)
{fscanf(f,"%lld %lld",&a[i][0],&a[i][1]);
a[i][0]-=x;
a[i][1]-=y;
}
}
int cmp(const void *x, const void *y)
{
return a[ * (long long *) x ][0] - a[ * (long long *) y ][0];
}
long long count()
{
long long st,dr,mid,ls,ld;
for (i=1;i<=k;i++)
{if (b[i][0]<0) b[i][0]*=-1;
if (b[i][1]<0) b[i][1]*=-1;
ord[i]=i;}
qsort(ord,k+1,sizeof(long long),cmp);
for (i=1;i<=k;i++)
cy[i]=b[ord[i]][1];
memset(pack,0,sizeof(pack));
ld=1;pack[1]=cy[1];
for (i=2;i<=k;i++)
{
st=1;
while (pack[st]>cy[i]&&st<=ld) st++;
pack[st]=cy[i];
if (st>ld) ld++;
}
return ld;
}
void solve()
{long long con;
//cadranul I
k=0;
for (i=1;i<=n;i++)
if (a[i][0]>0&&a[i][1]>0) {b[++k][0]=a[i][0];
b[k][1]=a[i][1];}
if (k) sol=count();
//cadranul II
k=0;
for (i=1;i<=n;i++)
if (a[i][0]<0&&a[i][1]>0) {b[++k][0]=a[i][0];
b[k][1]=a[i][1];}
con=0;
if (k) con=count();
sol+=con;
//cadranul III
k=0;
for (i=1;i<=n;i++)
if (a[i][0]>0&&a[i][1]<0) {b[++k][0]=a[i][0];
b[k][1]=a[i][1];}
con=0;
if (k) con=count();
sol+=con;
//cadranul IV
k=0;
for (i=1;i<=n;i++)
if (a[i][0]<0&&a[i][1]<0) {b[++k][0]=a[i][0];
b[k][1]=a[i][1];}
con=0;
if (k) con=count();
sol+=con;
fprintf(g,"%lld",sol);
}
int main()
{
citire();
solve();
fclose(f);
fclose(g);
return 0;
}