Cod sursa(job #1101040)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 7 februarie 2014 21:04:36
Problema Tribute Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <cstdio>
#include <algorithm>
#define MAX 50000

using namespace std;

int X[MAX+5],Y[MAX+5];

inline int Best(int X[], int l)
{
    int i,nrst[MAX+5],nrdr[MAX+5],cst[MAX+5],cdr[MAX+5],minim=2000000000,st,dr;
    nrst[0]=X[0]; cst[0]=0;
    for(i=1;i<=MAX;++i)
    {
        cst[i]=cst[i-1]+nrst[i-1];
        nrst[i]=nrst[i-1]+X[i];
    }
    nrdr[MAX+1]=cdr[MAX+1]=0;
    for(i=MAX;i>=0;--i)
    {
        cdr[i]=cdr[i+1]+nrdr[i+1];
        nrdr[i]=nrdr[i+1]+X[i];
    }

    for(st=0,dr=l;dr<=MAX;++st,++dr)
        minim=min(minim, cst[st]+cdr[dr]);
    return minim;
}

int main()
{
    int i,N,Dx,Dy,x,y;
    freopen ("tribute.in","r",stdin);
    freopen ("tribute.out","w",stdout);
    scanf("%d%d%d", &N,&Dx,&Dy);
    for(i=1;i<=N;++i)
    {
        scanf("%d%d", &x,&y);
        ++X[x]; ++Y[y];
    }
    printf("%d\n", Best(X,Dx)+Best(Y,Dy));
    return 0;
}