Cod sursa(job #3142402)

Utilizator matyaskrizbaiKrizbai Matyas matyaskrizbai Data 21 iulie 2023 10:09:54
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

int n;

void solve_1(int x, vector<int>& v) {
   int st=0, dr=n-1, mid;
   while(st<=dr) {
      mid=(st+dr)/2;
      if(v[mid]<=x)
         st=mid+1;
      else if(v[mid]>x)
         dr=mid-1;
   }
   if(v[st-1]==x)
      fout << st;
   else
      fout << -1;
}

void solve_2(int x, vector<int>& v) {
   int st=0, dr=n-1, mid;
   while(st<=dr) {
      mid=(st+dr)/2;
      if(v[mid]<=x)
         st=mid+1;
      else
         dr=mid-1;
   }
   fout << st;
}

void solve_3(int x, vector<int>& v) {
   int st=0, dr=n-1, mid;
   while(st<=dr) {
      mid=(st+dr)/2;
      if(v[mid]>=x)
         dr=mid-1;
      else
         st=mid+1;
   }
   fout << st+1;
}

int main() {
   fin >> n;
   vector<int> v(n);
   for(auto& val : v)
      fin >> val;
   
   int m;
   fin >> m;
   while(m--){
      int op, x;
      fin >> op >> x;
      if(op==0)
         solve_1(x, v);
      else if(op==1)
         solve_2(x, v);
      else
         solve_3(x, v);
      fout << '\n';
   }
   return 0;
}