Cod sursa(job #2622380)

Utilizator VladAlexandruAnghelache Vlad VladAlexandru Data 1 iunie 2020 01:40:04
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int v[100005];
int mi;
int cautare_binara(int st,int dr,int x)
{

    if(st>dr)
        return mi;
    mi=(st+dr)/2;
    if(x==v[mi])
        return mi;
    if(x<v[mi])
        return cautare_binara(st,mi-1,x);
    if(x>v[mi])
        return cautare_binara(mi+1,dr,x);
}

int main()
{
    int n;
    fin>>n;
    for(int i=1; i<=n; i++)
    {
        fin>>v[i];
    }
    int m;
    fin>>m;
    while(m--)
    {
        int x,y;
        fin>>x>>y;
        int poz=cautare_binara(1,n,y);
        if(x==0)
        {
            if(v[poz]!=y)
                fout<<-1<<"\n";
            else
            {
                while(v[poz+1]==v[poz])poz++;
                fout<<poz<<"\n";
            }
        }
        else if(x==1)
        {
            if(v[poz]==y)
                while(v[poz+1]==v[poz])poz++;
            else if(v[poz]>x)poz--;
            fout<<poz<<"\n";
        }
        else if(x==2)
        {
            if(v[poz]==y)
                while(v[poz-1]==v[poz])poz--;
            else if(v[poz]<x)poz++;
            fout<<poz<<"\n";
        }
    }

        return 0;
    }