Cod sursa(job #1753503)

Utilizator MateiMCCiurezu Matei MateiMC Data 6 septembrie 2016 16:54:44
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,v[100001],m,tip,nr;


void caut0(int x){
    int i=1, j=n, mij;
    while(i<=j){
        mij=(i+j)/2;
        if(v[mij]<=x){
            i=mij+1;
        }
        else{
            j=mij-1;
        }
    }
    mij=(i+j)/2;
    if(v[mij]!=x){
        mij--;
    }
    if(v[mij]==x){
        fout<<mij<<endl;
    }
    else fout<<-1<<endl;
}

void caut1(int x){
    int i=1, j=n, mij;
    while(i<=j){
        mij=(i+j)/2;
        if(v[mij]<=x){
            i=mij+1;
        }
        else{
            j=mij-1;
        }
    }
    mij=(i+j)/2;
    if(v[mij]>x){
        mij--;
    }
    fout<<mij<<endl;
}


void caut2(int x){
    int i=1, j=n, mij;
    while(i<=j){
        mij=(i+j)/2;
        if(v[mij]<x){
            i=mij+1;
        }
        else{
            j=mij-1;
        }
    }
    mij=(i+j)/2;
    if(v[mij]<x){
        mij++;
    }
    fout<<mij<<endl;
}


int main()
{
    fin>>n;
    for(int i=1; i<=n; i++){
        fin>>v[i];
    }
    fin>>m;
    while(m--){
        fin>>tip>>nr;
        if(tip==0){
            caut0(nr);
        }
        else if(tip==1){
            caut1(nr);
        }
        else if(tip==2){
            caut2(nr);
        }
    }

    return 0;
}