Cod sursa(job #2447820)

Utilizator OctavianVasileVasileOctavian OctavianVasile Data 14 august 2019 18:31:37
Problema Pachete Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("pachete.in");
ofstream fout ("pachete.out");
#define NMAX 5013
int n, v [NMAX], X, Y, A, B;
int LenCadran1, LenCadran2, LenCadran3, LenCadran4;
struct Punct{
    int x;
    int y;
}C1 [NMAX], C2 [NMAX], C3 [NMAX], C4 [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 << 14); 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)C1 [++ LenCadran1]     = { A,  B};
        else if (A >= 0 && B < 0)C2 [++ LenCadran2] = { A, -B};
        else if (A < 0 && B < 0)C3 [++ LenCadran3]  = {-A, -B};
        else if (A < 0 && B >= 0)C4 [++ LenCadran4] = {-A,  B};
    }
    fout << Solve (C1, LenCadran1) + Solve (C2, LenCadran2) + Solve (C3, LenCadran3) + Solve (C4, LenCadran4);
    return 0;
}