Cod sursa(job #346232)

Utilizator csizMocanu Calin csiz Data 7 septembrie 2009 11:54:08
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
using namespace std;
int main(){
    ifstream in("cautbin.in");
    ofstream out("cautbin.out");

    int n,m;
    int v[100000];
    in>>n;
    for(int i=0;i<n;++i) in>>v[i];
    in>>m;
    for(;m>0;--m){
        int a,x;
        in>>a>>x;
        if(a==0){
            int i=0,j=n-1;
            while(i!=j){
                if(x<v[(i+j+1)/2]) j=(i+j+1)/2-1;
                else i=(i+j+1)/2;
            }
            if(v[i]!=x) i=-2;
            out<<i+1<<"\n";
        }else if(a==1){
            int i=0,j=n-1;
            while(i!=j){
                if(x<v[(i+j+1)/2]) j=(i+j+1)/2-1;
                else i=(i+j+1)/2;
            }
            out<<i+1<<"\n";
        }else{
            int i=0,j=n-1;
            while(i!=j){
                if(x>v[(i+j-1)/2]) i=(i+j-1)/2+1;
                else j=(i+j-1)/2;
            }
            out<<i+1<<"\n";
        }
    }
}