Cod sursa(job #203056)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 13 august 2008 12:14:48
Problema Gropi Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.92 kb
#include<fstream.h>


int t,a,b,k,n,gr1[100010],gr2[100010],i,j,pasi,gropi,col,q=0,p=0,l1,c1,l2,c2;


void pozitie (int li, int  ls, int  &k, int v[100010])

 { int i,j,di,dj,aux;

  i=li; j=ls; di=0; dj=1;

  while(i<j)

   {if(v[i]>v[j]) { aux=v[i]; v[i]=v[j]; v[j]=aux;

		    aux=di; di=dj; dj=aux;}

    i=i+di;
    j=j-dj;
   }

   k=i;
 }

void quick ( int li , int ls, int v[100010])

 {
  if(li<ls)

     { pozitie(li,ls,k,v);

       quick(li,k-1,v);

       quick(k+1,ls,v);
     }
 }

int main()

{

ifstream f("gropi.in");
ofstream g("gropi.out");


f>>col>>gropi;


for(i=1;i<=gropi;i++)


   {  f>>l1>>c1;

     if(l1==1) gr1[++p]=c1;

       else gr2[++q]=c1;
   }

quick(1,p,gr1);
quick(1,q,gr2);


f>>n;


for(t=1;t<=n;t++)


 { f>>l1>>c1>>l2>>c2;   pasi=1;

    if(c1<c2)

     {  a=1; b=1;


	while(c1!=c2)


	{ if(l1==1)


	    {  while(c1>gr1[a]&&gr1[a]<c2&&a<=p) a++;


	      if(a>p||gr1[a]>c2) {pasi=pasi+c2-c1;  c1=c2;}


	      else


	       {l1=2; pasi=pasi+gr1[a]-c1; c1=gr1[a]-1;}



	    }

	   else

	    {  while(c1>gr2[b]&&gr2[b]<c2&&b<=q) b++;

	      if(b>q||gr2[b]>c2) { pasi=pasi+c2-c1; c1=c2;}


	      else

	       {l1=1; pasi=pasi+gr2[b]-c1; c1=gr2[b]-1;}
	    }
	 }

       if(l1!=l2) pasi++;
     }

   else

      {  a=p; b=q;


	while(c1!=c2)


	{ if(l1==1)


	    {  while(c1<gr1[a]&&gr1[a]>c2&&a>0) a--;

	      if(a<1||gr1[a]<c2) {pasi=pasi+c1-c2; c1=c2;}

	       else


	       {l1=2; pasi=pasi+c1-gr1[a]; c1=gr1[a]+1;}
	    }

	   else

	    {  while(c1<gr2[b]&&gr2[b]>c2&&b>0) b--;

	      if(b<1||gr2[b]<c2) {pasi=pasi+c1-c2; c1=c2;}

	      else

	       {l1=1; pasi=pasi+c1-gr2[b]; c1=gr2[b]+1;}
	    }
	 }

	if(l1!=l2) pasi++;
     }

    g<<pasi<<'\n';

  }

f.close();
g.close();
return 0;
}