Cod sursa(job #1586859)

Utilizator RadduFMI Dinu Radu Raddu Data 1 februarie 2016 18:04:09
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
 int n,q,a[100005];

int Cbin0(int x)
{ int i,res=0;
  for(i=16;i>=0;i--)
   if ((res|(1<<i))<=n && a[(res|(1<<i))]<=x) res|=(1<<i);

  if (a[res]==x) return res;
   else return -1;
}

int Cbin1(int x)
{ int i,res=0;

  for(i=16;i>=0;i--)
   if ((res|(1<<i))<=n && a[(res|(1<<i))]<=x) res|=(1<<i);

 return res;
}

int Cbin2(int x)
{ int i,res=0;

  for(i=16;i>=0;i--)
   if ((res|(1<<i))<=n && a[(res|(1<<i))]<x) res|=(1<<i);

 return res+1;
}

int main()
{ int i,t,x,p;
    f>>n;
  for(i=1;i<=n;i++)
   f>>a[i];

   f>>q;
  for(i=1;i<=q;i++)
   { f>>t>>x;
      if (t==0) p=Cbin0(x);
      if (t==1) p=Cbin1(x);
      if (t==2) p=Cbin2(x);
    g<<p<<"\n";
   }

  return 0;
}