/************************************************************** Problem: 1935 User: syh0313 Language: C++ Result: Accepted Time:4232 ms Memory:274732 kb ****************************************************************/ #include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <cmath> using namespace std; const int maxn=10000010; int n,m,cnt,ans[maxn],a[maxn],t; struct da{ int op,x,y,v,id;}q[maxn]; bool cmp(da aa,da bb) { if (aa.x==bb.x && aa.y==bb.y) return aa.op<bb.op; if (aa.x==bb.x) return aa.y<bb.y; return aa.x<bb.x; } inline int lowbit( int x){ return x&(-x);} void add( int x, int k){ while (x<=t) {a[x]+=k; x+=lowbit(x);}} int qury( int x){ int sum=0; while (x) {sum+=a[x]; x-=lowbit(x);} return sum;} int read() { int xx=0,ff=1; char c= getchar (); while (c< '0' || c> '9' ) { if (c== '-' ) ff=-1; c= getchar ();} while (c>= '0' && c<= '9' ) {xx=(xx<<1)+(xx<<3)+c- '0' ; c= getchar ();} return xx*ff; } int main() { scanf ( "%d%d" ,&n,&m); for ( int i=1;i<=n;i++) { int x,y; x=read(); y=read(); x+=2; y+=2; q[++cnt]={0,x,y,0,0}; t=max(t,y);} for ( int i=1;i<=m;i++) { int x,y,xx,yy; x=read(); y=read(); xx=read(); yy=read(); x+=2; y+=2; xx+=2; yy+=2; q[++cnt]={1,x-1,y-1,1,i}; q[++cnt]={1,xx,yy,1,i}; q[++cnt]={1,x-1,yy,-1,i}; q[++cnt]={1,xx,y-1,-1,i}; t=max(t,y); t=max(t,yy); } sort(q+1,q+cnt+1,cmp); for ( int i=1;i<=cnt;i++) { if (!q[i].op) add(q[i].y,1); else ans[q[i].id]+=qury(q[i].y)*q[i].v; } for ( int i=1;i<=m;i++) printf ( "%d\n" ,ans[i]); return 0; } |