Cod sursa(job #2612468)

Utilizator speedypleathGheorghe Andrei speedypleath Data 9 mai 2020 01:07:36
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int cautare(unsigned v[],unsigned val,int st,int dr)
{
    int m = (st+dr)/2;
    if(val==v[m]||st>dr)
        return m;
    else if(val<v[m])
        return cautare(v,val,st,m-1);
    else
        return cautare(v,val,m+1,dr);
}
int main()
{
    int n,m;
    in>>n;
    unsigned v[n];
    for(int i=0;i<n;i++)
        in>>v[i];
    in>>m;
    for(int i=0;i<m;i++){
        int x,a;
        unsigned val;
        in>>x;
        in>>val;
        a = cautare(v,val,0,n-1);
        if(x==0)
            if(v[a] == val){
                while(v[a+1]==val)
                    a++;
                out<<a+1<<'\n';
            }
            else
                out<<-1<<'\n';
        else if(x==1){
            while(v[a-1]>val)
                a--;
            while(v[a+1]==val)
                a++;
            out<<a+1<<'\n';
        }
        else{
            while(v[a+1]<val)
                a++;
            while(v[a-1]==val)
                a--;
            out<<a+1<<'\n';
        }
    }
}