Cod sursa(job #332855)

Utilizator andreea_beicaBeica Andreea andreea_beica Data 20 iulie 2009 18:38:08
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include<fstream.h>
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int n,m,v[100000];
int cautbin(int nr)
{
 int st=1,dr=n,mid,gasit=0;
 do{
    mid=st+(nr-st)/2;
    if(v[mid]==nr)
      return mid;
    else if(v[mid]<nr)
           st=mid+1;
           else dr=mid-1;
     }
     while(st<=dr && !gasit);
 return 0;
}
int c1(int poz,int x)
{
 int l=poz;
 while(v[l]==x && l<=n)
     l++;
     return l-1;
     }

void main()
{ int i,ef,x,poz,l;
 in>>n;
 for(i=1;i<=n;i++)
 in>>v[i];
 in>>m;
 for(i=1;i<=m;i++)
    {
     in>>ef>>x;
     l=cautbin(x);
     if(ef==0)
       if(l==0)
         out<<"-1 \n";
         else
               out<<c1(l,x)<<"\n";
        else if(ef==1)
                {
                 while(!cautbin(x))
                      x--;
                 poz=cautbin(x);
                 out<<c1(poz,x)<<"\n";
                 }
                 else if(l)
                      out<<l<<"\n";
                      else out<<(c1(l,x)+1)<<"\n";
      }
  in.close();
  out.close();
  }