Cod sursa(job #920103)

Utilizator Bogdan13Bogdan Stoian Bogdan13 Data 20 martie 2013 00:46:19
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include<fstream>
#define NMAX 100005
using namespace std;

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

long N,v[NMAX],M,t,x;



long caut3(long val , long l, long r)
{
    if(l>r)
  {
      long aux=v[l];
      while (v[l]==aux) l--;
      return l+1;
  }

    long m=(l+r)/2;

    if (val==v[m])
       {while (val==v[m]) m--;
       return m+1;}

    if (val>v[m]) return caut3 (val,m+1,r);
    if (val<v[m]) return caut3 (val,l,m-1);


}


long caut2(long val , long l, long r)
{
    if(l>r)
  {
      long aux=v[r];
      while (v[r]==aux) r++;
      return r-1;
  }

    long m=(l+r)/2;

    if (val==v[m])
       {while (val==v[m]) m++;
       return m-1;}

    if (val<v[m]) return caut2 (val,l,m-1);
    if (val>v[m]) return caut2 (val,m+1,r);

}


long caut1(long val , long l, long r)
{
    if(l>r)
    return -1;

    long m=(l+r)/2;

    if (val==v[m])
       {while (val==v[m]) m++;
       return m-1;}

    if (val<v[m]) return caut1 (val,l,m-1);
    if (val>v[m]) return caut1 (val,m+1,r);

}



int main()
{
    f>>N;
    for (long i=1;i<=N;i++)
    f>>v[i];

    f>>M;
    for (long i=1;i<=M;i++)
    {
        f>>t>>x;

        if (t==0)
            g<<caut1(x,1,N)<<'\n';
        if (t==1)
            g<<caut2(x,1,N)<<'\n';
         if (t==2)
            g<<caut3(x,1,N)<<'\n';

    }
return 0;
}