Pagini recente » Cod sursa (job #285652) | Cod sursa (job #2030401) | Cod sursa (job #29692) | Cod sursa (job #19782) | Cod sursa (job #263559)
Cod sursa(job #263559)
#include <cstdio>
int N, DX, DY, rez;
int st[50005], dr[50005], f[50005], nr[50005];
struct punct
{
int x, y;
} v[50005];
int min(int x, int y) { return x < y ? x : y;}
int main()
{
freopen("tribute.in","r",stdin);
freopen("tribute.out","w",stdout);
int i, j;
scanf("%d %d %d",&N, &DX, &DY);
for (i = 1; i <= N; i++) scanf("%d %d",&v[i].x, &v[i].y);
// caut pt DX
for (i = 1; i <= N; i++) f[ v[i].x ]++;
nr[0] = f[0];
for (i = 1; i <= 50000; i++) nr[i] = nr[i - 1] + f[i];
for (i = 1; i <= 50000; i++)
{
j = 50000 - i;
st[i] = st[i - 1] + nr[i - 1];
dr[j] = dr[j + 1] + (N - nr[j + 1]);
}
int m = (1<<30);
for (i = 0; i <= 50000 - DX + 1; i++) m = min(st[i] + dr[i + DX - 1], m);
rez += m;
// caut pt DY
for (i = 0; i <= 50000; i++) f[i] = nr[i] = 0;
for (i = 1; i <= N; i++) f[ v[i].y ]++;
nr[0] = f[0];
for (i = 1; i <= 50000; i++) nr[i] = nr[i - 1] + f[i];
for (i = 1; i <= 50000; i++)
{
j = 50000 - i;
st[i] = st[i - 1] + nr[i - 1];
dr[j] = dr[j + 1] + (N - nr[j + 1]);
}
m = (1<<30);
for (i = 0; i <= 50000 - DY + 1; i++) m = min(st[i] + dr[i + DY - 1], m);
rez += m;
printf("%d\n",rez);
return 0;
}