Cod sursa(job #2341986)

Utilizator YetoAdrian Tonica Yeto Data 12 februarie 2019 15:08:19
Problema Tribute Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
#define N 50000
using namespace std;
int stx[50005], fr1[50005], fr2[50005], drx[50005], sty[50005], dry[50005], fr[50005];
int n, dx, dy, i, j, x, y, min1=2000000000, min2=2000000000, maxx, maxy;

int main () {
    ifstream fin ("tribute.in");
    ofstream fout ("tribute.out");
    fin>>n>>dx>>dy;
    for (i=1;i<=n;i++) {
        fin>>x>>y;
        maxx=max(x, maxx);
        maxy=max(y, maxy);
        fr1[x]++;
        fr2[y]++;
    }

    fr[0]=fr1[0];
    for (i=1;i<=maxx;i++) {
        fr[i]=fr[i-1]+fr1[i];
    }
    stx[0]=0;
    for (i=1;i<=maxx;i++) {
        stx[i]=fr[i-1]+stx[i-1];
    }

    fr[maxx]=fr1[maxx];
    for (i=maxx-1;i>=0;i--) {
        fr[i]=fr[i+1]+fr1[i];
    }
    drx[maxx]=0;
    for (i=maxx-1;i>=0;i--) {
        drx[i]=drx[i+1]+fr[i+1];
    }

    for (i=0;i<=maxx;i++) {
        min1=min(min1, stx[i]+drx[i+dx]);
    }

    fr[0]=fr2[0];
    for (i=1;i<=maxy;i++) {
        fr[i]=fr[i-1]+fr2[i];
    }
    sty[0]=0;
    for (i=1;i<=maxy;i++) {
        sty[i]=sty[i-1]+fr[i-1];
    }

    fr[maxy]=fr2[maxy];
    for (i=maxy-1;i>=0;i--) {
        fr[i]=fr[i+1]+fr2[i];
    }
    dry[maxy]=0;
    for (i=maxy-1;i>=0;i--) {
        dry[i]=dry[i+1]+fr[i+1];
    }

    for (i=0;i<=maxy;i++) {
        min2=min(min2, sty[i]+dry[i+dy]);
    }

    fout<<min1+min2;
    return 0;
}