Pagini recente » Cod sursa (job #2866322) | Cod sursa (job #906257) | Cod sursa (job #2900870) | Cod sursa (job #2025669) | Cod sursa (job #426245)
Cod sursa(job #426245)
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
#define x first
#define y second
const int lg1 = 100005, lg2 = 1000005;
int n, m, W, H, x, y, i, end, st, j, rsp, d[lg2];
vector<int> w[lg2];
pair<int, int> v[lg1];
void add(int poz, int val){
for (; poz <= 1000001; poz += (poz ^ (poz - 1)) & poz)
d[poz] += val;
}
int query(int poz){
int rez = 0;
for (; poz; poz -= (poz ^ (poz - 1)) & poz)
rez += d[poz];
return rez;
}
int main()
{
freopen("ograzi.in", "rt", stdin);
freopen("ograzi.out", "wt", stdout);
scanf("%d%d%d%d", &n, &m, &W, &H);
for (i = 1; i <= n; i ++){
scanf("%d%d", &x, &y);
w[x + W + 1].push_back(y + 1);
}
for (i = 1; i <= m; i ++){
scanf("%d%d", &v[i].x, &v[i].y);
v[i].x ++; v[i].y ++;
}
sort(v + 1, v + m + 1);
for (i = st = end = 1; i <= 1000001; i ++){
for (; v[end].x == i && end <= m; end ++)
add(v[end].y, 1);
for (; v[st].x <= i - W - 1 && st <= m; st ++)
add(v[st].y, -1);
for (j = 0; j < (int)w[i].size(); j ++)
rsp += query(w[i][j] + H) - query(w[i][j] - 1);
}
printf("%d\n", rsp);
return 0;
}