Cod sursa(job #2065179)

Utilizator darkviper17Dark Viper darkviper17 Data 13 noiembrie 2017 15:31:41
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <algorithm>

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

int n, m, v[100000], L=16;

int binary_search_0(int x) //pentru prima cerinta
{
  int pas, r=0;
  pas=1<<L;
  
  while(pas)
  {
    if(r+pas<=n && v[r+pas]<=x) r+=pas;
      pas/=2;
  }
  if(v[r+pas]!=x) return -1;
  return r++;
}


int binary_search_1(int x) //pentru a doua cerinta
{
  int pas, r=0;
  pas=1<<L;
  
  while(pas)
  {
    if(r+pas<=n && v[r+pas]<=x) r+=pas;
      pas/=2;
  }
  return r;
}

int binary_search_2(int x) // pentru a treia cerinta
{
  int pas, r=0;
  pas=1<<L;
  
  while(pas)
  {
    if(r+pas<=n && v[r+pas]<x) r+=pas;
      pas/=2;
  }
  
  return r+1;
}


int main()
{
  int i, tip, val;
  fin>>n;
  for(i=1; i<=n; i++)
    fin>>v[i];
    
  fin>>m;
  
  while(m--)
  {
    fin>>tip>>val;
      if(tip==0) {
          fout<<binary_search_0(val)<<'\n';
      } 
      
      if(tip==1){
          fout<<binary_search_1(val)<<'\n';
      }
      
      if(tip==2){
          fout<<binary_search_2(val)<<'\n';
      }
  }
  
    return 0;
}