Cod sursa(job #2622370)

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

using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
vector<int> v;
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=0; i<n; i++)
    {
        int x;
        fin>>x;
        v.push_back(x);
    }
    int m;
    fin>>m;
    while(m--)
    {
        int x,y;
        fin>>x>>y;
        int poz=cautare_binara(0,n-1,y);
        if(x==0)
        {
            if(v[poz]!=y)
                fout<<-1<<"\n";
            else
            {
                while(poz+1<n&&v[poz+1]==v[poz])poz++;
                fout<<poz+1<<"\n";
            }
        }
        else if(x==1)
        {
            if(v[poz]==y)
                while(poz+1<n&&v[poz+1]==v[poz])poz++;
            else if(v[poz]>x)poz--;
            fout<<poz+1<<"\n";
        }
        else
        {
            if(v[poz]==y)
                while(poz-1>=0&&v[poz-1]==v[poz])poz--;
            else if(v[poz]<x)poz++;
            fout<<poz+1<<"\n";
        }
    }

        return 0;
    }