Pagini recente » Cod sursa (job #270633) | Cod sursa (job #275762) | Cod sursa (job #1543065) | Cod sursa (job #1881135) | Cod sursa (job #2447822)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("pachete.in");
ofstream fout ("pachete.out");
/// oooooooof
#define NMAX 50013
int n, v [NMAX], X, Y, A, B;
int LenCadran1, LenCadran2, LenCadran3, LenCadran4;
struct Punct{
int x;
int y;
}Cadran [5][NMAX];
bool cmp (Punct A,Punct B){
if (A.x == B.x)return A.y < B.y;
return A.x < B.x;
}
int Solve (Punct Cadran [], int LenCadran){
sort (Cadran + 1, Cadran + LenCadran + 1, cmp);
int ans = 0;
for (int i = 1; i <= LenCadran; i ++){
int temp = 0;
for (int pas = (1 << 15); pas != 0 ; pas /= 2)
if (temp + pas <= ans && v [temp + pas] > Cadran [i].y)
temp += pas;
temp ++;
if (temp > ans)v [++ ans] = Cadran [i].y;
else v [temp] = Cadran [i].y;
}
return ans;
}
int main (){
fin >> n;
fin >> X >> Y;
for (int i = 1; i <= n; i ++){
fin >> A >> B;
A -= X; B -= Y;
if (A >= 0 && B >= 0)Cadran [1][++ LenCadran1] = { A, B};
else if (A >= 0 && B < 0)Cadran [2][++ LenCadran2] = { A, -B};
else if (A < 0 && B < 0)Cadran [3][++ LenCadran3] = {-A, -B};
else if (A < 0 && B >= 0)Cadran [4][++ LenCadran4] = {-A, B};
}
fout << Solve (Cadran [1], LenCadran1) + Solve (Cadran [2], LenCadran2) + Solve (Cadran [3], LenCadran3) + Solve (Cadran [4], LenCadran4);
return 0;
}