Cod sursa(job #2856438)

Utilizator ioana.cCaprariu Ioana ioana.c Data 23 februarie 2022 21:12:55
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include <fstream>

using namespace std;

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

int n, a[100001], m, cer, x;

int cautbin0(int x){
    int p=1, u=n, mij, poz=0;
    while(p <= u){
        mij = (p+u)/2;
        if(a[mij]==x && poz!=mij)
            poz = mij;
        else
            if(a[mij] <= x)
                p = mij+1;
            else
                u = mij-1;
    }
    if(poz == 0)
        return -1;
    else
        return poz;
}

int cautbin1(int x){
    int p=1, u=n, mij, poz=0;
    while(p < u){
        mij = (p+u)/2;
        if(a[mij]==x && poz!=mij)
            poz = mij;
        else
            if(a[mij] <= x)
                p = mij+1;
            else
                u = mij-1;
    }
    return poz;
}

int cautbin2(int x){
    int p=1, u=n, mij, poz=0;
    while(p < u){
        mij = (p+u)/2;
        if(a[mij]==x && poz!=mij)
            poz = mij;
        else
            if(a[mij] < x)
                p = mij+1;
            else
                u = mij;
    }
    return poz;
}


int main(){
    fin >> n;
    for(int i=1; i<=n; i++)
        fin >> a[i];
    fin >> m;
    for(int i=1; i<=m; i++){
        fin >> cer >> x;
        if(cer == 0)
            fout << cautbin0(x) << '\n';
        if(cer == 1)
            fout << cautbin1(x) << '\n';
        if(cer == 2)
            fout << cautbin2(x) << '\n';
    }
    return 0;
}