Pagini recente » Cod sursa (job #2974713) | Cod sursa (job #2063795) | Cod sursa (job #2300387) | Cod sursa (job #2136215) | Cod sursa (job #3193415)
#include <cstdio>
#include <unordered_map>
#pragma GCC optimize ("unroll-loops","O2")
#define dimbuff 10000000
using namespace std;
FILE *fin=fopen ("ograzi.in","r");
FILE *fout=fopen ("ograzi.out","w");
int sol,dr,pct,x[50001],y[50001],n,m,i,a,b,l,c,nrc,lin,col;
long long poz,poz1,poz2,poz3,poz4;
unordered_map <long long,int> fr;
char buff[dimbuff];
int pp;
bool f (int poz)
{
lin=x[poz];
col=y[poz];
if (a>=lin&&a<=lin+l-1&&b>=col&&b<=col+c-1)
return 1;
else
return 0;
}
int numar()
{
int val=0;
while (!(buff[pp]>='0'&&buff[pp]<='9'))
{
pp++;
if (pp==dimbuff)
{
fread (buff,1,dimbuff,fin);
pp=0;
}
}
while (buff[pp]>='0'&&buff[pp]<='9')
{
val=val*10+buff[pp]-'0';
pp++;
if (pp==dimbuff)
{
fread (buff,1,dimbuff,fin);
pp=0;
}
}
return val;
}
int main()
{
dr=numar ();
pct=numar ();
l=numar ();
c=numar ();
for (i=1; i<=dr; i++)
{
x[i]=numar ();
y[i]=numar ();
n=max (n,x[i]);
m=max (m,y[i]);
}
l++;
c++;
nrc=n/l+1;
for (i=1; i<=dr; i++)
{
poz=1ll*y[i]/c*nrc+x[i]/l;
fr[poz]=i;
}
for (i=1; i<=pct; i++)
{
a=numar ();
b=numar ();
poz1=1ll*b/c*nrc+a/l;
poz2=poz1-1;
poz3=poz1-nrc;
poz4=poz3-1;
sol+=f (fr[poz1])||f (fr[poz2])||f (fr[poz3])||f (fr[poz4]);
}
fprintf (fout,"%d",sol);
return 0;
}