Pagini recente » Cod sursa (job #2004704) | Cod sursa (job #2433206) | Cod sursa (job #1836472) | Cod sursa (job #801852) | Cod sursa (job #1939058)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream si("gropi.in");
ofstream so("gropi.out");
int s[100005],c,n;
int cont;
struct grup{int x,y;};
grup v[100005];
inline bool comp(grup a,grup b)
{
return a.y<b.y;
}
int bins(int x,bool k)
{
int st=1,dr=n,mj;
//if(k==0)
// so<<'\n'<<'\n';
while(st<=dr)
{
mj=(st+dr)/2;
// if(k==0)
// so<<mj<<',';
if(v[mj].y==x)
return mj;
if(v[mj].y<x)
st=mj+1;
else dr=mj-1;
}
//if(k==0)
// so<<'\n'<<st<<' '<<dr<<'\n'<<'\n';
if(k)
return st;
return dr;
}
int main()
{
si>>c>>n;
for(int i=1;i<=n;++i)
si>>v[i].x>>v[i].y;
sort(v+1,v+n+1,comp);
for(int i=2;i<=n;++i)
s[i]=s[i-1]+(v[i-1].x!=v[i].x);
int q;
si>>q;
int g1,g2,x1,y1,x2,y2;
while(q--)
{
si>>x1>>y1>>x2>>y2;
if(y1>y2)
{
swap(y1,y2);
swap(x1,x2);
}
g1=bins(y1,1);
//so<<g1<<' ';
if(g1>n)
{
so<<y2-y1+1+(x2!=x1)<<'\n';
}
else
{
if(y1==y2)
{
so<<1+(x2!=x1)<<'\n';
}
else
{
if(v[g1].y==y1)
++g1;
//so<<y2<<' ';
g2=bins(y2,0);
//so<<g1<<' '<<g2;
if(g1>g2)
{
so<<y2-y1+1+(x1!=x2)<<'\n';
}
else
so<<s[g2]-s[g1]+(v[g2].x==x2)+(v[g1].x==x1)+(y2-y1+1)<<'\n';
}
}
}
return 0;
}