Pagini recente » Cod sursa (job #2272093) | Cod sursa (job #1570635) | Cod sursa (job #3033087) | Cod sursa (job #2449558) | Cod sursa (job #291361)
Cod sursa(job #291361)
#include<fstream>
using namespace std;
ifstream fin("gropi.in");
ofstream fout("gropi.out");
struct groapa { int x,y;
} a[100001];
int n,m,c,b[100001],x1,y1,x2,y2,e;
void quick(int x,int y)
{ int i,j,p;
groapa aux;
if(x<y)
{ i=x-1;
j=y+1;
p=a[(x+y)/2].y;
while(i<j)
{ do i++; while(a[i].y<p);
do j--; while(a[j].y>p);
if(i<j) { aux=a[i];
a[i]=a[j];
a[j]=aux;
}
}
quick(x,i-1);
quick(j+1,y);
}
}
int main()
{ int i,aux,st,dr,st1,mij;
fin>>c>>n;
for(i=1;i<=n;i++)
fin>>a[i].x>>a[i].y;
quick(1,n);
fin>>m;
for(i=2;i<=n;i++)
{ b[i]=b[i-1]+a[i].y-a[i-1].y;
if(a[i].x!=a[i-1].x)
b[i]++;
}
for(i=1;i<=m;i++)
{ fin>>x1>>y1>>x2>>y2;
if(y1>y2)
{ aux=x1;
x1=x2;
x2=aux;
aux=y1;
y1=y2;
y2=aux;
}
st=1;
dr=n;
while(st<=dr)
{ mij=(st+dr)/2;
if(y1<=a[mij].y) dr=mij-1;
else st=mij+1;
}
e=a[st].y-y1+1;
if(a[st].x==x1)
e++;
st1=st;
st=1;
dr=n;
while(st<=dr)
{ mij=(st+dr)/2;
if(y2>=a[mij].y) st=mij+1;
else dr=mij-1;
}
e+=b[dr]-b[st1];
e+=y2-a[dr].y;
if(x2==a[dr].x) e++;
if(st1>dr)
{ e=y2-y1+1;
if(x1!=x2) e++;
}
fout<<e<<"\n";
}
fin.close();
fout.close();
return 0;
}