Pagini recente » Cod sursa (job #2959252) | Cod sursa (job #127065) | Cod sursa (job #2332025) | Cod sursa (job #1442924) | Cod sursa (job #2095179)
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#define MAX 131072
#define mkp make_pair
#define x first
#define y second.first
#define z second.second
#define AIBS 2000005
using namespace std;
FILE*si=fopen("ograzi.in","r");
FILE*so=fopen("ograzi.out","w");
int n,m,w,h,pos;
char f[MAX];
vector<pair<int,pair<int,int> > >v;
int aib[AIBS];
void citnum(int &nr)
{
nr=0;
while(f[pos]<'0'||f[pos]>'9')
{
pos++;
if(pos==MAX)
{
fread(f,MAX,1,si);
pos=0;
}
}
while(f[pos]>='0'&&f[pos]<='9')
{
nr=10*nr+f[pos++]-'0';
if(pos==MAX)
{
fread(f,MAX,1,so);
pos=0;
}
}
}
void update(int k,int val)
{
while(k<AIBS)
{
//cout<<k<<'\n';
aib[k]+=val;
k+=(k&(k^(k-1)));
}
}
int query(int k)
{
int sum=0;
while(k)
{
sum+=aib[k];
k-=(k&(k^(k-1)));
}
return sum>0;
}
int main()
{
int a,b;
int poz,lg;
fread(f,1,MAX,si);
citnum(n);
citnum(m);
citnum(w);
citnum(h);
for(int i=0;i<n;++i)
{
citnum(a);
citnum(b);
++a;
++b;
//cout<<a<<' '<<b<<'\n';
v.push_back(mkp(a,mkp(0,b)));
v.push_back(mkp(a+w,mkp(2,b)));
}
for(int i=0;i<m;++i)
{
citnum(a);
citnum(b);
++a;
++b;
v.push_back(mkp(a,mkp(1,b)));
}
int lim=v.size(),rez=0;
sort(v.begin(),v.end());
for(int i=0;i<lim;++i)
{
//cout<<v[i].z<<'\n';
if(v[i].y==0)
{
update(v[i].z,1);
update(v[i].z+h+1,-1);
}
else
if(v[i].y==2)
{
update(v[i].z,-1);
update(v[i].z+h+1,1);
}
else
if(v[i].y==1)
rez+=query(v[i].z);
}
fprintf(so,"%d\n",rez);
return 0;
}