Cod sursa(job #1538596)

Utilizator FairPlay94George Cioroiu FairPlay94 Data 29 noiembrie 2015 14:46:25
Problema Tribute Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <cstdio>
#include <iostream>
#include <set>
#include <climits>
#include <map>
#include <algorithm>
#include <list>
#include <vector>
#include <utility>
#include <cstdlib>

using namespace std;

int f(int v[50005], int d, int n) {
    int ps = 0, pd = 0, st = 0, dr = 0, val = v[0];
    while (pd < n && v[pd] <= val + d)
        pd++;
    for (int i = pd; i < n; i++) {
        dr += v[i] - val - d;
    }
    int minim = dr;
    while (pd < n) {
        val++;
        while (v[ps] < val)
            ps++;
        dr -= n - pd;
        while (pd < n && v[pd] <= val + d)
            pd++;
        st += ps;
        if (st + dr < minim)
            minim = st + dr;
    }
    return minim;
}

int main() {
  //  freopen("tt.txt", "r", stdin);
    freopen("tribute.in", "r", stdin);
    freopen("tribute.out", "w", stdout);

    ios::sync_with_stdio(false);
    cin.tie(0);

    int n, dx, dy, x[50005], y[50005];
    cin >> n >> dx >> dy;
    for (int i = 0; i < n; i++) {
        cin >> x[i] >> y[i];
    }
    int ans = 0;
    sort(x, x + n);
    ans += f(x, dx, n);
    sort(y, y + n);
    ans += f(y, dy, n);
    cout << ans;

    return 0;
}