Pagini recente » Cod sursa (job #1325055) | Cod sursa (job #3269661) | Cod sursa (job #1232677) | Cod sursa (job #3178912) | Cod sursa (job #25757)
Cod sursa(job #25757)
#include <stdio.h>
#include <algorithm>
using namespace std;
#define maxn 300100
#define maxl 20
#define maxv 1000010
int n,m,dx,dy,sol;
int a[maxn],b[maxn],z[maxn],p[maxn],c[maxv];
char v[maxl];
int cif(char x)
{
return ((x>='0') && (x<='9'));
}
void read(int &x,int &y)
{
fgets(v,maxl,stdin);
x=y=0;
int i=0;
while (cif(v[i])) x=x*10+v[i++]-'0';
while (!cif(v[i])) i++;
while (cif(v[i])) y=y*10+v[i++]-'0';
}
int cmp(int x,int y)
{
return b[x]<b[y];
}
int cmp2(int x,int y)
{
return (a[x]<a[y]) || ((a[x]==a[y]) && ((b[x]<b[y]) || ((b[x]==b[y]) && (z[x]<z[y]))));
}
int LSB(int x)
{
return (x^(x-1))&x;
}
int query(int x)
{
int rez=0;
while (x>0)
{
rez+=c[x];
x-=LSB(x);
}
return rez;
}
void update(int x)
{
while (x<=n)
{
c[x]++;
x+=LSB(x);
}
}
int main()
{
freopen("ograzi.in","r",stdin);
freopen("ograzi.out","w",stdout);
int i,aux,j;
scanf("%d %d %d %d ",&aux,&m,&dx,&dy);
for (i=1;i<=aux;i++)
{
n+=4;
read(a[n],b[n]);
a[n-1]=a[n];
b[n-1]=b[n]+dy+1;
a[n-2]=a[n]+dx+1;
b[n-2]=b[n];
a[n-3]=a[n]+dx+1;
b[n-3]=b[n]+dy+1;
z[n]=1;
z[n-1]=2;
z[n-2]=2;
z[n-3]=1;
}
for (i=1;i<=m;i++)
{
n++;
read(a[n],b[n]);
a[n]++;
b[n]++;
z[n]=0;
}
for (i=1;i<=n;i++) p[i]=i;
sort(p+1,p+n+1,cmp2);
for (i=1;i<=n;i++)
if (z[p[i]]==0) update(b[p[i]]);
else if (z[p[i]]==1) sol+=query(b[p[i]]);
else sol-=query(b[p[i]]);
printf("%d\n",sol);
return 0;
}