Pagini recente » Cod sursa (job #398110) | Cod sursa (job #3279184) | Cod sursa (job #2391913) | Cod sursa (job #2053905) | Cod sursa (job #819055)
Cod sursa(job #819055)
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
using namespace std;
#define inf 0x3f3f3f3f
#define nmax 50010
int apX[nmax + 10], apY[nmax + 10], cnt[nmax + 10], V1[nmax + 10], V2[nmax + 10];
int N, X, Y, i, DX, DY;
int ans;
int main()
{
freopen("tribute.in", "r", stdin);
freopen("tribute.out", "w", stdout);
scanf("%i %i %i", &N, &DX, &DY);
for(i = 1; i <= N; i++)
{
scanf("%i %i", &X, &Y);
apX[X] ++;
apY[Y] ++;
}
for(i = 0; i < nmax; i++)
{
V1[i] = V1[i - 1] + cnt[i - 1];
cnt[i] = cnt[i - 1] + apX[i];
}
memset(cnt, 0, sizeof(cnt));
for(i = nmax - 1; i >= 0; i--)
{
V2[i] = V2[i + 1] + cnt[i + 1];
cnt[i] = cnt[i+1] + apX[i];
}
int minn = inf;
for(i = 0; i < nmax; i++)
if(i + DX < nmax)
minn = min(minn, V1[i] + V2[i + DX]);
ans = minn;
memset(cnt, 0, sizeof(cnt));
memset(V1, 0, sizeof(V1));
memset(V2, 0, sizeof(V2));
for(i = 0; i < nmax; i++)
{
V1[i] = V1[i - 1] + cnt[i - 1];
cnt[i] = cnt[i - 1] + apY[i];
}
memset(cnt, 0, sizeof(cnt));
for(i = nmax - 1; i >= 0; i--)
{
V2[i] = V2[i + 1] + cnt[i + 1];
cnt[i] = cnt[i + 1] + apY[i];
}
minn = inf;
for(i = 0; i < nmax; i++)
if(i + DY < nmax)
minn = min(minn, V1[i] + V2[i + DY]);
ans += minn;
printf("%i\n", ans);
return 0;
}