Pagini recente » Cod sursa (job #1908658) | Cod sursa (job #3185678) | Cod sursa (job #2160309) | Cod sursa (job #237778) | Cod sursa (job #170120)
Cod sursa(job #170120)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define pb push_back
#define mp make_pair
#define all(c) (c).begin(), (c).end()
#define tip second.first
#define x first
#define y second.second
int n, m, w, h;
const int MAX_C = 1000010;
int T[MAX_C];
typedef pair<int,int> PII;
vector<pair<int,PII> > E;
int sol = 0;
char s[40], *p;
void update(int idx, int val)
{
while (idx < MAX_C)
{
T[idx] += val;
idx += (idx & -idx);
}
}
int query(int idx)
{
int sum = 0;
while (idx > 0)
{
sum += T[idx];
idx -= (idx & -idx);
}
return sum;
}
int get(void)
{
int n;
for (; *p == ' '; p++);
for (n = 0; *p >= '0' && *p <='9'; p++)
n = n*10 + *p-'0';
for (; *p == ' '; p++);
return n;
}
int main()
{
freopen("ograzi.in","r",stdin);
freopen("ograzi.out","w",stdout);
scanf("%d%d%d%d\n", &n, &m, &w, &h);
for (int i = 0; i < n; ++i)
{
int xx, yy;
gets(s); p = s;
xx = get(); yy = get();
++xx; ++yy;
E.pb(mp(xx,mp(1,yy)));E.pb(mp(xx + w,mp(3,yy)));
}
for (int i = 0; i < m; ++i)
{
int xx, yy;
gets(s); p = s;
xx = get(); yy = get();
++xx; ++yy;
E.pb(mp(xx,mp(2,yy)));
}
sort(all(E));
for (int i = 0; i < (int)E.size(); ++i)
{
if (E[i].tip == 1)
{
update(E[i].y,1);
update(E[i].y + h + 1,-1);
}
else if (E[i].tip == 3)
{
update(E[i].y,-1);
update(E[i].y + h + 1,1);
}
else if (E[i].tip == 2)
{
if (query(E[i].y) > 0) ++sol;
}
}
printf("%d\n", sol);
return 0;
}