Cod sursa(job #2949800)

Utilizator Theo8338Theodor Sandu Theo8338 Data 1 decembrie 2022 18:46:29
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.6 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
vector <int> v;
int cautare0(int y)
{
    int st=0,dr=v.size()-1,ok=0,mij;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(v[mij]==y && v[mij+1]!=y)
        {
            ok=1;
            break;
        }
        else
            if(y>=v[mij])
                st=mij+1;
            else
                dr=mij-1;
    }
    if(ok==1)
        return mij+1;
    else
        return -1;

}

int cautare1(int y)
{
    int st=0,dr=v.size()-1,ok=0,mij;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(v[mij]<=y && v[mij+1]>y)
        {
            ok=1;
            break;
        }
        else
            if(y>=v[mij])
                st=mij+1;
            else
                dr=mij-1;
    }
    return mij+1;
}

int cautare2(int y)
{
    int st=0,dr=v.size()-1,ok=0,mij;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(v[mij]>=y && v[mij+1]<=y && v[mij-1]!=y)
        {
            ok=1;
            break;
        }
        else
            if(y<=v[mij])
                dr=mij-1;
            else
                st=mij+1;
    }
    return mij+1;
}
int main()
{
    int n,i,x,y,m;
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>x;
        v.push_back(x);
    }
    fin>>m;
    for(i=1;i<=m;i++)
    {
        fin>>x>>y;
        if(x==0)
            fout<<cautare0(y)<<'\n';
        if(x==1)
            fout<<cautare1(y)<<'\n';
        if(x==2)
            fout<<cautare2(y)<<'\n';
    }
    return 0;
}