Pagini recente » Cod sursa (job #349012) | Cod sursa (job #3039937) | Cod sursa (job #18415) | Cod sursa (job #546515) | Cod sursa (job #2759837)
#include <bits/stdc++.h>
using namespace std;
ifstream f("gropi.in");
ofstream g("gropi.out");
struct wow
{
int x,y;
}v[100005];
bool compare (wow a,wow b)
{
return a.y<b.y;
}
int distanta (pair <int,int> a ,pair <int,int> b)
{
return abs(a.first-b.first)+abs(a.second-b.second)+1;
}
int 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-1]+distanta({v[sol1].x%2+1,v[sol1].y},{x2,y2})-(sol1-sol+1)<<'\n';
}
}
}
return 0;
}