Pagini recente » Cod sursa (job #1507607) | Cod sursa (job #1696949) | Cod sursa (job #2682986) | Cod sursa (job #1457306) | Cod sursa (job #203192)
Cod sursa(job #203192)
#include<fstream.h>
int col,gropi,m,t,k,i,pasi,l1,l2,c1,c2;
struct sir {int x,y;};
sir v[100010],aux;
void pozitie (int li, int ls, int &k)
{ int i,j,di,dj,aux2;
i=li; j=ls; di=0; dj=1;
while(i<j)
{if(v[i].y>v[j].y) { aux=v[i]; v[i]=v[j]; v[j]=aux;
aux2=di; di=dj; dj=aux2;}
i=i+di;
j=j-dj;
}
k=i;
}
void quick ( int li , int ls)
{
if(li<ls)
{ pozitie(li,ls,k);
quick(li,k-1);
quick(k+1,ls);
}
}
int main()
{
ifstream f("gropi.in");
ofstream g("gropi.out");
f>>col>>gropi;
for(i=1;i<=gropi;i++)
f>>v[i].x>>v[i].y;
quick(1,gropi);
f>>m;
for(t=1;t<=m;t++)
{ f>>l1>>c1>>l2>>c2; pasi=1;
if(c1<c2)
{ i=1;
while(c1!=c2)
{while(l1!=v[i].x&&i<=gropi&&v[i].y<c2) i++;
if(i>gropi||v[i].y>c2) {pasi=pasi+c2-c1; c1=c2;}
else { pasi=pasi+v[i].y-c1; c1=v[i].y-1;
if(l1==1) l1=2;
else l1=1;
}
}
if(l1!=l2) pasi++;
}
else
{ i=gropi;
while(c1!=c2)
{while(l1!=v[i].x&&i>0&&v[i].y>c2) i--;
if(i<1||v[i].y<c2) {pasi=pasi+c1-c2; c1=c2;}
else { pasi=pasi+c1-v[i].y; c1=v[i].y+1;
if(l1==1) l1=2;
else l1=1;
}
}
if(l1!=l2) pasi++;
}
g<<pasi<<'\n';
}
f.close();
g.close();
return 0;
}