Cod sursa(job #2699743)

Utilizator doruliqueDoru MODRISAN dorulique Data 25 ianuarie 2021 19:13:36
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb

#include <iostream>
#include <fstream>


using namespace std;

int prima(int n,int v[],int x)
{
    int li=1,lf=n;
    int m=(li+lf)/2;
    while(li<=lf)
    {
        if(v[m]<=x)li=m+1;
        else lf=m-1;
        m=(li+lf)/2;
    }
    if(x==v[lf])return lf;
    else return -1;

}


int doi(int n,int v[],int x)
{
    int li=1,lf=n;
    int m=(li+lf)/2;
    while(li<=lf)
    {
        if(v[m]<=x)li=m+1;
        else lf=m-1;
        m=(li+lf)/2;
    }
    return lf;

}


int trei(int n,int v[],int x)
{
    int li=1,lf=n;
    int m=(li+lf)/2;
    while(li<=lf)
    {
        if(v[m]>=x)lf=m-1;
        else li=m+1;
        m=(li+lf)/2;
    }
    return li;

}

int v[100001];

int main()
{
    int i,n,m,x;
    fstream f("cautbin.in");
    ofstream g("cautbin.out");
    f>>n;
    for(i=1; i<=n; i++)
        f>>v[i];
    f>>m;
    for(i=1; i<=m; i++)
    {
        int y;
        f>>y>>x;
        if(y==0)g<<prima(n,v,x)<<'\n';
        else if(y==1)g<<doi(n,v,x)<<'\n';
        else if(y==2)g<<trei(n,v,x)<<'\n';
    }
    f.close();
    g.close();
    return 0;
}