大常数选手 TLE * 3 求助。/bx
#include <bits/stdc++.h>
using namespace std;
// #define int long long
#define endl '\n'
#define print(x, y) cout<<(#x)<<" = "<<(x)<<y
const int N = 5e5 + 5;
namespace BIT {
int n, t[N];
int lowbit(int x) {
return (-x) & x;
}
void add(int x, int k) {
for(int i = x; i <= n; i += lowbit(i)) t[i] += k;
}
int sum(int x) {
int r = 0;
for(int i = x; i; i -= lowbit(i)) r += t[i];
return r;
}
int sum(int l, int r) {
return sum(r) - sum(l - 1);
}
void init(int m, int b[]) {
n = m;
for(int i = 1; i <= n; i++) add(i, b[i]);
}
};
int n, m, a[N], b[N], c[N], d[N], f[N], g[N];
vector<int> p, q, l[N], r[N];
void update(int &f, vector<int> v, int s) {
// cout<<"update "<<f<<" "<<(&f)<<endl;
f = lower_bound(v.begin(), v.begin() + s, f) - v.begin() + 1;
// cout<<"result "<<f<<endl;
}
struct Node {
int x, y;
} e[N];
bool operator<(Node s, Node t) {
if(s.x != t.x) return s.x < t.x;
else return s.y < t.y;
}
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin>>n>>m;
for(int i = 1; i <= n; i++) cin>>e[i].x>>e[i].y;
for(int i = 1; i <= m; i++) cin>>a[i]>>b[i]>>c[i]>>d[i];
for(int i = 1; i <= n; i++) p.push_back(e[i].x), q.push_back(e[i].y);
for(int i = 1; i <= m; i++) p.push_back(a[i]), p.push_back(c[i]), q.push_back(b[i]), q.push_back(d[i]);
sort(p.begin(), p.end()), sort(q.begin(), q.end());
int k1 = unique(p.begin(), p.end()) - p.begin(), k2 = unique(q.begin(), q.end()) - q.begin();
// cout<<k1<<" "<<k2<<endl;
// for(int i = 0; i < k1; i++) cout<<p[i]<<" "; cout<<endl;
// for(int i = 0; i < k2; i++) cout<<q[i]<<" "; cout<<endl;
for(int i = 1; i <= n; i++) update(e[i].x, p, k1), update(e[i].y, q, k2);
for(int i = 1; i <= m; i++) update(a[i], p, k1), update(c[i], p, k1), update(b[i], q, k2), update(d[i], q, k2);
for(int i = 1; i <= m; i++) l[a[i] - 1].push_back(i), r[c[i]].push_back(i);
sort(e + 1, e + n + 1);
BIT::n = k2;
for(int i = 0, j = 1; i <= k1; i++) {
while(e[j].x <= i && j <= n) BIT::add(e[j].y, 1), j++;
for(int k : l[i]) f[k] = BIT::sum(b[k], d[k]);
for(int k : r[i]) g[k] = BIT::sum(b[k], d[k]);
}
for(int i = 1; i <= m; i++) cout<<g[i] - f[i]<<endl;
}