仅过#4
#include <bits/stdc++.h>
using namespace std;
#define N 10000005
int n,m,cnt;
int c[N],ans[N<<2];
struct tree{
int x,y;
}t[500005];
struct query{
int id,x,y;
}a[N<<2];
bool cmp1(tree a,tree b){
if(a.x==b.x) return a.y<b.y;
return a.x<b.x;
}
bool cmp2(query a,query b){
if(a.x==b.x) return a.y<b.y;
return a.x<b.x;
}
void add(int x){ //下标从零开始,整体加1
for(int i=x+1;i<=10000001;i+=i&(-i)) c[i]++;
}
int gsum(int x){
int res=0;
for(int i=x+1;i;i-=i&(-i)) res+=c[i];
return res;
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>t[i].x>>t[i].y;
for(int i=1;i<=m;i++){
int ax,ay,bx,by; cin>>ax>>ay>>bx>>by;
cnt++; a[cnt]=query{cnt,bx,by};
cnt++; a[cnt]=query{cnt,ax-1,by};
cnt++; a[cnt]=query{cnt,bx,ay-1};
cnt++; a[cnt]=query{cnt,ax-1,ay-1};
}
sort(t+1,t+n+1,cmp1);
sort(a+1,a+cnt+1,cmp2);
int cur=1;
for(int i=1;i<=cnt;i++){
while(cur<=n && t[cur].x<=a[i].x){
add(t[cur].y); cur++;
}
ans[a[i].id]+=gsum(a[i].y);
}
for(int i=1;i<=cnt;i+=4)
cout<<ans[i]-ans[i+1]-ans[i+1]+ans[i+3]<<endl;
return 0;
}