Cod sursa(job #1174705)

Utilizator hasmasandragosHasmasan Dragos hasmasandragos Data 23 aprilie 2014 18:29:37
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <fstream>

using namespace std;

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

int n,a[100005],t,q;

int bsrc (int val)
{int pas,i;
 for (pas=1;pas<=n;pas<<=1);
 for (i=0; pas ; pas>>=1)
  if (i+pas<n && a[i+pas]<=val)
   i+=pas;
 return i;
}

int main()
{int i,v,val;
 f>>n;
 for (i=0;i<n;i++)
  f>>a[i];
 f>>q;
 for (i=0;i<q;i++)
 {f>>t>>val;
  if (t==0)
  {v=bsrc(val);
   if (a[v]==val) g<<v+1<<'\n';
   else g<<"-1"<<'\n';
  }
  if (t==1)
  g<<bsrc(val)+1<<'\n';
  if (t==2)
  {v=bsrc(val);
   if (a[v]!=val) g<<v+2<<'\n';
   else
    {while (a[v]==val)
      v--;
     g<<v+2<<'\n';
    }
  }
 }

    return 0;
}