Cod sursa(job #1883538)

Utilizator adriashkin.07alehandru69 adriashkin.07 Data 18 februarie 2017 02:00:31
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <bits/stdc++.h>
#define ll long long
#define ui unsigned int
using namespace std;
 
int n,m,i,j;
unsigned int st,dr,mid,fin=1,a[100010],x,y;
 
ll cb1(ui st, ui dr){
    if(st==dr-1) return fin;
    mid=(st+dr)/2;
    if(a[mid]>y) {
    fin=st;
    cb1(st,mid);}
    else{ 
    if(a[mid]==y)fin=mid; else fin=dr;
    cb1(mid,dr);}
}
ll cb2(ui st, ui dr)
{
 if(st==dr-1) return fin;
 mid=(st+dr)/2;
 if(a[mid]>=y) {if(a[mid]==y)fin=mid; else fin=st; 
 cb2(st,mid);}
 else {fin=dr; cb2(mid,dr);}
}
                                                                     //  1 2 3 4 4 4 5 6 7 8 8 12
 
int main()
{
   ifstream cin("cautbin.in");
   ofstream cout("cautbin.out");
    
   cin>>n;
   for(i=1;i<=n;i++) cin>>a[i];
   cin>>m;
   for(j=1;j<=m;j++)
   {
      cin>>x>>y;
        if(x==0){
            cb1(1,n);
            if(a[fin]==y) cout<<fin<<"\n";
            else cout<<-1<<"\n";
           }
        if(x==1)
        {
            cb1(1,n);
            cout<<fin<<"\n";
        }
        if(x==2)
        {
                cb2(1,n);
                cout<<fin<<"\n";    
            }
        }
    
     return 0; 
}