Cod sursa(job #285923)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 23 martie 2009 10:50:20
Problema Gropi Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.91 kb
#include<fstream>
#include<algorithm>
using namespace std;
  
int t,a,b,k,n,gr1[100010],gr2[100010],i,j,pasi,gropi,col,q=0,p=0,l1,c1,l2,c2;   
  
int cmp(int a,int b)
 { return a<b;}
  
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;   
   }   
  
sort(gr1+1,gr1+p+1,cmp);
sort(gr2+1,gr2+q+1,cmp);
  
  
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;   
}