Cod sursa(job #2493346)

Utilizator DanBarbilianMuresan Dan Adrian DanBarbilian Data 16 noiembrie 2019 11:46:42
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.47 kb
#include <bits/stdc++.h>

using namespace std;
int v[100001];
int caut_bin1(int st, int dr, int element)
{
    int mijloc,raspuns = -1;
    if(v[dr]==element)
        return dr;
    while(st<dr)
    {
        mijloc = (st+dr)/2;
        if(v[mijloc]>element)
            dr = mijloc;
        else{
            st = mijloc+1;
            if(v[mijloc]==element)
                raspuns = mijloc;
        }
    }
    return raspuns;
}

int caut_bin2(int st, int dr, int element){
    int mijloc;
    if(v[dr]<=element)
        return dr;
    while(st<dr){
        mijloc = (st+dr)/2;
        if(v[mijloc]<=element)
            st = mijloc+1;
        else dr= mijloc;
    }
    if(v[mijloc]>element)
        return mijloc-1;
    return mijloc;
}

int caut_bin3(int st,int dr,int element){
    int mijloc;
    while(st<dr){
        mijloc = (st+dr)/2;
        if(v[mijloc]<element)
            st = mijloc+1;
        else
            dr = mijloc;
    }
    if(v[mijloc]<element)
        return mijloc+1;
    return mijloc;
}

int main()
{
    ifstream fin("cautbin.in");
    ofstream fout("cautbin.out");
    int n,x,m,t;
    fin>>n;
    for(int i=1; i<=n; i++)
        fin>>v[i];
    fin>>m;
    while(m){
        fin>>t>>x;
        if(t==0)
            fout<<caut_bin1(1,n,x)<<'\n';
        if(t==1)
            fout<<caut_bin2(1,n,x)<<'\n';
        if(t==2)
            fout<<caut_bin3(1,n,x)<<'\n';
        m--;
    }

    return 0;
}