#include using namespace std; #define endl '\n' struct Coco { bool czy_odc; //jesli 0 - punkt, jesli 1 - odcinek int x, y; int y_d, y_g; bool czy_kon; // jesli 0 - poczÄ…tek, jesli 1 - koniec int indeks; int ind_pocz; int wynik; }; bool operator< (Coco &a, Coco &b) { if(a.x < b.x) return true; else if(b.x < a.x) return false; else { if(a.y < b.y) return true; else if(b.y < a.x) return false; else { if((a.czy_odc = 1 && a.czy_kon == 0) || (b.czy_odc = 1 && b.czy_kon == 0)) return true; else if((a.czy_odc = 1 && a.czy_kon == 1) || (b.czy_odc = 1 && b.czy_kon == 1)) return false; } } } struct Tree { int sz = 1; vector t; Tree(int n) { while(sz < n) sz *= 2; t.resize(2 * sz); } void dodaj(int v) { v += sz; ++t[v]; v /= 2; while(v) { ++t[v]; v /= 2; } } int suma(int l, int r) { l += sz; r += sz; if(l == r) return l; int sum = t[l] + t[r]; while(l / 2 != r / 2) { if(l % 2 == 1) sum += t[l + 1]; if(r % 2 == 0) sum += t[r - 1]; l /= 2; r /= 2; } return sum; } }; int main() { ios_base::sync_with_stdio(0); cin.tie(); int n, k; cin >> n >> k; vector v(n + 2 * k); for(int i = 0; i < n; ++i) { cin >> v[i].x >> v[i].y; v[i].czy_odc = 0; } for(int i = 0, j = 0; i < 2 * k, j < k; i += 2, ++j) { cin >> v[n + i].x >> v[n + i].y >> v[n + i + 1].x >> v[n + 1 + i].y; v[n + i].czy_odc = 1; v[n + i].czy_kon = 0; v[n + i + 1].czy_odc = 1; v[n + i + 1].czy_kon = 1; v[n + i].y_d = v[n + i + 1].y_d = v[n + i].y; v[n + i].y_g = v[n + i + 1].y_g = v[n + i + 1].y; v[n + i].indeks = v[n + i + 1].indeks = i / 2; v[n + i + 1].ind_pocz = n + i; } sort(v.begin(), v.end()); Tree t(1e6 + 1); vector answ(k); for(int i = 0; i < n + 2 * k; ++i) { if(v[i].czy_odc == 0) t.dodaj(v[i].y); else { v[i].wynik = t.suma(v[i].y_d, v[i].y_g); if(v[i].czy_kon == 0) continue; else answ[v[i].indeks] = v[i].wynik - v[v[i].ind_pocz].wynik; } } for(int &i : answ) cout << i << endl; }