Cod sursa(job #2535760)

Utilizator david.teacaDavid Stefan Teaca david.teaca Data 1 februarie 2020 11:12:22
Problema Pachete Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.53 kb
#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;
	
}