Cod sursa(job #2481736)

Utilizator ruxandramateiMatei Ruxandra ruxandramatei Data 27 octombrie 2019 12:51:05
Problema Cautare binara Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <fstream>
 
using namespace std;
 
ifstream in("cautbin.in");
ofstream out("cautbin.out");
 
int n, m;
int v[100001];
 
void citire(){
  in >> n;
  for(int i = 1; i <= n; i++)
    in >> v[i];
}
 
int poz;
 
int cautareBinara(int st, int dr, int caut){
  if(st > dr){
    poz = st;
    return -1;
  }
  else{
    int mij = st + (dr -st) / 2;
    if(v[mij] > caut)
      cautareBinara(st, mij - 1, caut);
    else if(v[mij] == caut)
      return mij;
    else
      cautareBinara(mij + 1, dr, caut);
  }
}
 
void rezolvare(){
  in >> m;
  for(int i = 1; i <= m; i++){
    int a, b;
    poz = 0;
    in >> a >> b;
    int temp = cautareBinara(1,n, b);
    if(a == 0){
      if(temp == -1)
        out << temp  << '\n';
      else{
        while(v[temp] == b)temp++;
        out << temp - 1 << '\n';
      }
    }
    else if(a == 2){
      int temp = cautareBinara(1, n, b);
      if(temp == -1)
        out << poz << '\n';
      else{
        while(v[temp] == b)temp--;
        out << temp + 1 << '\n';
      }
    }
    else{
      int temp = cautareBinara(1, n, b);
      if(temp == -1)
        out << poz - 1<<'\n';
      else{
        while(v[temp] == b)temp++;
        out << temp - 1 << '\n';
      }
    }
  }
}
 
int main(){
  citire();
  rezolvare();
  return 0;
}