Pagini recente » Cod sursa (job #1923915) | Cod sursa (job #822200) | Cod sursa (job #3355933) | Cod sursa (job #1375320) | Cod sursa (job #3317447)
#include <bits/stdc++.h>
using namespace std;
long long solve(vector<int> &X, int DX) {
int max_coord = *max_element(X.begin(), X.end());
vector<long long> cost_le(max_coord + 1), cost_ri(max_coord + 1);
vector<int> freq(max_coord + 1);
if(DX > max_coord) {
return 0;
}
for(auto x : X) {
freq[x]++;
}
int cnt = freq[0];
for(int i = 1; i <= max_coord; i++) {
cost_le[i] = cost_le[i - 1] + cnt;
cnt += freq[i];
}
cnt = freq[max_coord];
for(int i = max_coord - 1; i >= 0; i--) {
cost_ri[i] = cost_ri[i + 1] + cnt;
cnt += freq[i];
}
long long ret = LLONG_MAX;
for(int i = 0; i <= max_coord - DX; i++) { ///daca DX > max_coord
ret = min(ret, cost_le[i] + cost_ri[i + DX]);
}
return ret;
}
int main() {
#ifndef LOCAL
freopen("tribute.in", "r", stdin);
freopen("tribute.out", "w", stdout);
#endif
ios::sync_with_stdio(false);
cin.tie(0);
int N, DX, DY;
cin >> N >> DX >> DY;
vector<int> X(N), Y(N);
for(int i = 0; i < N; i++) {
cin >> X[i] >> Y[i];
}
cout << solve(X, DX) + solve(Y, DY) << "\n";
return 0;
}