Cod sursa(job #1690498)

Utilizator ButmalaiDanButmalai Dan ButmalaiDan Data 15 aprilie 2016 10:31:16
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<fstream>
using namespace std;
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
int n,a[100010],m,x,y;
int caut1(int x){
     int st=1,dr=n,piv;
     while(st<=dr){
        piv=(st+dr)/2;
        if(a[piv]<=x)st=piv+1;
          else dr=piv-1;
     }
     piv=(st+dr)/2;
     while(a[piv]>x)piv--;
     if(a[piv]==x)return piv;
     return -1;
}
int caut2(int x){
     int st=1,dr=n,piv;
     while(st<dr){
         piv=(dr+st)/2;
         if(a[piv]<=x)st=piv+1;
           else dr=piv;
     }
     piv=(dr+st)/2;
     while(a[piv]>x)piv--;
     return piv;
}
int caut3(int x){
    int st=1,dr=n,piv;
     while(st<dr){
         piv=(dr+st)/2;
        if(a[piv]<x)st=piv+1;
         else dr=piv;
     }
     piv=(dr+st)/2;;
     while(a[piv]<x)piv++;
     return piv;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    cin>>m;
    while(m--){
               cin>>x>>y;
               if(x==0)cout<<caut1(y)<<"\n";
               if(x==1)cout<<caut2(y)<<"\n";
               if(x==2)cout<<caut3(y)<<"\n";
               }
}