Pagini recente » Cod sursa (job #1934094) | Cod sursa (job #2188369) | Cod sursa (job #1595165) | Cod sursa (job #1797833) | Cod sursa (job #19240)
Cod sursa(job #19240)
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
#define MAXN 50005
int N;
vector< pair<int, int> > x[4];
vector<int> y;
int NR = 0;
void solve( vector< pair<int, int> > &x )
{
if (x.size() == 0)
return;
y.clear();
y.push_back( x[0].second );
for (int i = 1; i < (int)x.size(); i++)
{
if (x[i].second < y.back())
y.push_back( x[i].second );
else
{
int k, step = 1 << 16, sz = y.size();
for (k = -1; step; step >>= 1)
if (k + step < sz && y[k + step] > x[i].second)
k += step;
k++;
y[k] = x[i].second;
}
}
NR += y.size();
}
int main()
{
freopen("pachete.in", "rt", stdin);
freopen("pachete.out", "wt", stdout);
scanf("%d", &N);
int Ox, Oy;
scanf("%d %d", &Ox, &Oy);
for (int i = 0; i < N; i++)
{
int a, b;
scanf("%d %d", &a, &b);
a -= Ox; b -= Oy;
x[ ((a < 0) << 1) | (b < 0) ].push_back( make_pair( abs(a), abs(b)) );
}
for (int i = 0; i < 4; i++)
{
sort(x[i].begin(), x[i].end());
x[i].resize( unique(x[i].begin(), x[i].end()) - x[i].begin() );
solve( x[i] );
}
printf("%d\n", NR);
return 0;
}