Pagini recente » Cod sursa (job #1788067) | Cod sursa (job #2704213) | Cod sursa (job #864275) | Cod sursa (job #611077) | Cod sursa (job #565726)
Cod sursa(job #565726)
#include<fstream>
#include<algorithm>
#define DIM 100003
using namespace std;
int dist[DIM],poz;
int C,n,M;
struct gr{
int a,b;};
gr V[DIM];
void cautare(int st,int dr,int val);
void solve();
int comp(gr x,gr y);
int main()
{
ifstream fin("gropi.in");
ofstream fout("gropi.out");
fin>>C>>n;
int i;
for(i=1;i<=n;i++)
fin>>V[i].a>>V[i].b;
sort(V+1,V+n+1,comp);
solve();
fin>>M;
for(i=1;i<=M;i++)
{
int dis=0;
int x1,y1,x2,y2;
fin>>x1>>y1>>x2>>y2;
if(y1>y2)
swap(y1,y2),swap(x1,x2);
poz=n+1;
cautare(1,n,y1);
int gri=poz;
poz=n+1;
cautare(1,n,y2);
int grf=poz;
//fout<<"bau bau"<<gri<<" "<<grf<<"mai tare ";
if(gri!=grf)
{
grf--;
if(x1==V[gri].a)
dis+=V[gri].b-y1+2;
else
dis+=V[gri].b-y1+1;
//fout<<dis<<" ";
dis+=dist[grf]-dist[gri];
//fout<<dis<<" ";
if(x2==V[grf].a)
dis+=y2-V[grf].b+1;
else
dis+=y2-V[grf].b;
}
else
{
if(x1==x2)
dis+=y2-y1+1;
else
dis+=y2-y1+2;
}
fout<<dis<<"\n";
}
return 0;
}
void solve()
{
int i;
for(i=2;i<=n;i++)
if(V[i].a!=V[i-1].a)
dist[i]=dist[i-1]+V[i].b-V[i-1].b+1;
else
dist[i]=dist[i-1]+V[i].b-V[i-1].b;
}
void cautare(int st,int dr,int val)
{
if(st==dr)
{
if(V[st].b>=val && st<poz)
poz=st;
return ;
}
else
{
int mij=(st+dr)/2;
if(V[mij].b>val)
{
if(mij<poz)
poz=mij;
cautare(st,mij,val);
}
else
cautare(mij+1,dr,val);
}
}
int comp(gr x,gr y)
{
if(x.b>y.b)
return 0;
return 1;
}