Cod sursa(job #2077534)

Utilizator vladstanciuVlad Stanciu vladstanciu Data 28 noiembrie 2017 10:45:52
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>

using namespace std;

ifstream in("cautbin.in");
ofstream out("cautbin.out");
int n;
const int N=16;
int v[100001];

void functie(int nr , int n)
{
     int r=0,pas;
     pas=1<<16;
     while(pas!=0)
     {
         if(r+pas<=n && v[r+pas]<=nr)
         {
              r+=pas;
         }
         pas/=2;
     }
     if(v[r]!=nr)
     {
        r=-1;
     }
     out<<r<<"\n";
}
void functie1(int nr , int n)
{
     int r=0,pas;
     pas=1<<16;
     while(pas!=0)
     {
         if(r+pas<=n && v[r+pas]<=nr)
         {
              r+=pas;
         }
         pas/=2;
     }
     out<<r<<"\n";
}
void functie2(int nr , int n)
{
     int r=0,pas;
     pas=1<<16;
     while(pas!=0)
     {
         if(r+pas<=n && v[r+pas]<nr)
         {
              r+=pas;
         }
         pas/=2;
     }
     if(v[r]!=nr)
     {
        r++;
     }
     out<<r<<"\n";
}
int main()
{
    int pas,r=0,i,k,f,nr;
    pas=1<<N;
    in>>n;
    for(i=1 ; i<=n ; i++)
    {
        in>>v[i];
    }
    in>>k;
    for(i=1 ; i<=k ; i++)
    {
         in>>f;
         in>>nr;
         if(f==0)
         {
             functie(nr,n);
         }
         if(f==1)
         {
            functie1(nr,n);
         }
         if(f==2)
         {
            functie2(nr,n);
         }
    }
    return 0;
}