Pagini recente » Cod sursa (job #680767) | Cod sursa (job #2288790) | Cod sursa (job #1006384) | Cod sursa (job #839116) | Cod sursa (job #2759841)
#include <bits/stdc++.h>
using namespace std;
ifstream f("gropi.in");
ofstream g("gropi.out");
struct wow
{
long long x,y;
}v[100005];
bool compare (wow a,wow b)
{
return a.y<b.y;
}
long long distanta (pair <long long ,long long > a ,pair <long long ,long long > b)
{
return abs(a.first-b.first)+abs(a.second-b.second)+1;
}
long long col,n,i,sum[100005],x,y,x2,y2,st,dr,mij,sol,sol1,m;
int main()
{
f>>col>>n;
for (i=1;i<=n;i++)
{
f>>v[i].x>>v[i].y;
}
sort (v+1,v+n+1,compare);
for (i=2;i<=n;i++)
{
sum[i]=sum[i-1]+distanta({v[i-1].x%2+1,v[i-1].y},{v[i].x%2+1,v[i].y});
}
f>>m;
for (i=1;i<=m;i++)
{
f>>x>>y>>x2>>y2;
st=1;
dr=n;
sol=0;
while (st<=dr)
{
mij=(st+dr)/2;
if (y<=v[mij].y)
{
sol=mij;
dr=mij-1;
}
else
{
st=mij+1;
}
}
if (sol==0)
{
g<<distanta({x,y},{x2,y2})<<'\n';
}
else
{
st=1;
dr=n;
sol1=0;
while (st<=dr)
{
mij=(st+dr)/2;
if (v[mij].y<=y2)
{
sol1=mij;
st=mij+1;
}
else
{
dr=mij-1;
}
}
if (sol1==0)
{
g<<distanta({x,y},{x2,y2})<<'\n';
}
else
{
g<<distanta({x,y},{v[sol].x%2+1,v[sol].y})+sum[sol1]-sum[sol]+distanta({v[sol1].x%2+1,v[sol1].y},{x2,y2})-(sol1-sol+1)<<'\n';
}
}
}
return 0;
}