Cod sursa(job #2500137)

Utilizator bpalaniciPalanici Bogdan bpalanici Data 27 noiembrie 2019 11:54:30
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.84 kb
#include <fstream>
#include<iostream>
#include<stack>
using namespace std;

#define NMAX 100005

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

int n;
int v[NMAX];

void citire(int &n,int v[])
{
   fin>>n;
   for(int i=1;i<=n;i++)
      fin>>v[i];
}

int b0(int v[],int n,int val)
{
   int st = 1;
   int dr = n;
   int ans = -1;
   int mij;

   while(st <= dr)
   {
      mij = st + (dr-st)/2;
      if(v[mij] == val)
      {
         ans = mij;
         st = mij+1;
      }
      else if(v[mij] > val)
      {
         dr = mij-1;
      }
      else
      {
         st = mij+1;
      }
   }
   return ans;

}
int b1(int v[],int n,int val)
{
   int st = 1;
   int dr = n;
   int ans = 0;
   int mij;

   while(st <= dr)
   {
      mij = st + (dr-st)/2;
      if(v[mij] == val)
      {
         ans = mij;
         st = mij+1;
      }
      else if(v[mij] > val)
      {
         dr = mij-1;
      }
      else
      {
         ans = mij;
         st = mij+1;
      }
   }
   return ans;

}
int b2(int v[],int n,int val)
{
   int st = 1;
   int dr = n;
   int ans = 0;
   int mij;

   while(st <= dr)
   {
      mij = st + (dr-st)/2;
      if(v[mij] == val)
      {
         ans = mij;
         dr = mij-1;
      }
      else if(v[mij] > val)
      {
         ans = mij;
         dr = mij-1;

      }
      else
      {
         st = mij+1;
      }
   }
   return ans;

}

void rezolva()
{
   int t;
   fin>>t;
   for(int i=1;i<=t;i++)
   {
      int mod,val;
      fin>>mod>>val;

      if(mod == 0)
      {
         fout<<b0(v,n,val)<<'\n';
      }
      else if(mod == 1)
      {
         fout<<b1(v,n,val)<<'\n';
      }
      else fout<<b2(v,n,val)<<'\n';

   }
}

int main()
{

   citire(n,v);
   rezolva();


   return 0;
}