Cod sursa(job #1330186)

Utilizator MIrcea_GheoaceGheoace Mircea MIrcea_Gheoace Data 30 ianuarie 2015 14:46:56
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
using namespace std;
int caut(int A[],int x,int imin,int imax)
{
   int imid;imid=imin+(imax-imin)/2;
   if(imin>imax)
    return -1;
   else
   {if(A[imid]==x)
    return imid;
   if(A[imid]>x)
    return caut(A,x,imin,imid-1);
   if(A[imid]<x)
    return caut(A,x,imid+1,imax);
   else return imid;}
}
int main()
{ifstream f("cautarebin.in");
ofstream g("cautarebin.out");
int i,x,nr,A[100000],M,N,ok,j,nr1;
f>>N;
for(i=1;i<=N;i++)
{
    f>>A[i];
}
f>>M;
for(i=0;i<M;i++)
{
    f>>nr>>x;
    if(nr==0)
         {nr1=caut(A,x,0,N-1);ok=1;
         if(nr1!=-1)
         {for(j=nr1;ok;j++)
            if(A[j]!=A[nr1])
                {nr1=j-1;g<<nr1<<'\n';ok=0;}}
         else g<<-1<<'\n';}
    else if(nr==1)
            {if(ok==0) g<<nr1<<'\n';
            else {while(nr1==-1)
                    {--x;nr1=caut(A,x,0,N-1);}
                g<<nr1<<'\n';}
            }
     else {if(ok==0)
                {for(j=nr1;A[j]==A[nr1];j--);nr1=++j;}
            else while(nr1==-1)
                    {++x;nr1=caut(A,x,0,N-1);}
                g<<nr1;}
}
}