Cod sursa(job #2002956)

Utilizator ruxandramateiMatei Ruxandra ruxandramatei Data 21 iulie 2017 12:14:02
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 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;
}