Pagini recente » Cod sursa (job #2276324) | Cod sursa (job #2954672) | Cod sursa (job #1519907) | Cod sursa (job #967328) | Cod sursa (job #1981636)
#include <cstdio>
#include <algorithm>
#define x first
#define y second
using namespace std;
FILE *f=fopen("gropi.in","r");
FILE *g=fopen("gropi.out","w");
pair<int,int> V[100005];
int C,N,M;
int len=0;
int X,Y,XX,YY;
int S[100005];
bool cmp(pair<int,int> a,pair<int,int> b)
{
return a.y<b.y;
}
int bs(int Y,bool K)
{
int st=1,dr=N;
while(st<=dr)
{
int mid=(st+dr)/2;
if(V[mid].y==Y)return mid;
if(V[mid].y<Y)st=mid+1;
else dr=mid-1;
}
if(K) return dr;
return st;
}
int main()
{
fscanf(f,"%d %d",&C,&N);
for(int i=1;i<=N;i++)
{
fscanf(f,"%d %d",&V[i].x,&V[i].y);
}
sort(V+1,V+1+N,cmp);
for(int i=1;i<=N;i++)
S[i]=S[i-1]+(V[i-1].x!=V[i].x);
fscanf(f,"%d",&M);
while(M--)
{
fscanf(f,"%d%d%d%d",&X,&Y,&XX,&YY);
if(Y>YY)
{
swap(X,XX);
swap(Y,YY);
}
int ind1=bs(Y,0);
int ind2=bs(YY,1);
if(ind1>N||ind2<1)
{
fprintf(g,"%d\n",YY-Y+1+(X!=XX));
}
else
fprintf(g,"%d\n",YY-Y+1+S[ind2]-S[ind1]+(V[ind1].x==X)+(V[ind2].x==XX));
}
fclose(f);
fclose(g);
return 0;
}