Mai intai trebuie sa te autentifici.

Cod sursa(job #1364944)

Utilizator Theodor1000Cristea Theodor Stefan Theodor1000 Data 27 februarie 2015 21:54:39
Problema Pachete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <cstdio>
#include <algorithm>

#define f first
#define s second
#define mp make_pair

using namespace std;

int dx[] = {1, -1,  1, -1}, c[50010];
int dy[] = {1, -1, -1,  1};
pair <int, int> vv[50010], v[50010];

int main ()
{
    freopen ("pachete.in", "r", stdin);
    freopen ("pachete.out", "w", stdout);

    int n, x, y;
    scanf ("%d %d %d", &n, &x, &y);

    for (int i = 1; i <= n; ++i)
    {
        scanf ("%d %d", &vv[i].f, &vv[i].s);
        vv[i].f -= x;
        vv[i].s -= y;
    }

    int rez = 0;
    for (int h = 0; h < 4; ++h)
    {
        int k = 0;
        for (int i = 1; i <= n; ++i)
        {
            int x = vv[i].f * dx[h];
            int y = vv[i].s * dy[h];

            if (x >= 0 && y >= 0) v[++k] = mp (x, y);
        }

        if (!k) continue;

        sort (v + 1, v + k + 1);
        int p = 1;
        c[1] = 1;

        for (int i = 2; i <= k; ++i)
        {
            int a = 1, b = p;
            while (a <= b)
            {
                int m = (a + b) >> 1;

                if (v[c[m]].s > v[i].s) a = m + 1;
                else b = m - 1;
            }

            c[a] = i;
            p = max (p, a);
        }

        rez += p;
    }

    printf ("%d\n", rez);

    return 0;
}