Cod sursa(job #2151335)

Utilizator RaduVFVintila Radu-Florian RaduVF Data 4 martie 2018 13:07:39
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>

using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
const int NMAX=100001;
int a[NMAX];

int Cautbin0(int li, int ls, int x) {
    int m;
    while(li<=ls) {
        m=(li+ls)/2;
        if(a[m]<=x)
            li=m+1;
        else
            ls=m-1;
    }
    if(a[ls]!=x)
        return -1;
    return ls;
}

int Cautbin1(int li, int ls, int x) {
    int m;
    while (li<=ls) {
        m=(li+ls)/2;
        if (a[m]>x)
            ls=m-1;
        else
            li=m+1;
    }
    return ls;
}

int Cautbin2(int li, int ls, int x) {
    int m;
    while(li<=ls) {
        m=(li+ls)/2;
        if(a[m]<x)
            li=m+1;
        else
            ls=m-1;
    }
    return li;
}

int main()
{
    int n,m,x,y;
    fin>>n;
    for(int i=1; i<=n; i++) fin>>a[i];
    fin>>m;
    for(int i=1; i<=m; i++) {
        fin>>x>>y;
        if(x==0) fout<<Cautbin0(1,n,y)<<endl;
        else if(x==1) fout<<Cautbin1(1,n,y)<<endl;
        else fout<<Cautbin2(1,n,y)<<endl;
    }
    return 0;
}