Cod sursa(job #1765092)

Utilizator gabib97Gabriel Boroghina gabib97 Data 26 septembrie 2016 12:13:47
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>
#include <limits.h>
using namespace std;
int n,i,p,x,v[100001],m,r;
int cautare1(int a,int b,int x)
{
    if (a==b) return a;
    else
    {
        int m=(a+b)>>1;
        if (v[m]<=x) return cautare1(m+1,b,x);
        else return cautare1(a,m,x);
    }
}
int cautare3(int a,int b,int x)
{
    if (a==b) return a;
    else
    {
        int m=(a+b)>>1;
        if (v[m]<x) return cautare3(m+1,b,x);
        else return cautare3(a,m,x);
    }
}
int main()
{
    freopen ("cautbin.in","r",stdin);
    freopen ("cautbin.out","w",stdout);
    scanf("%i",&n);
    for (i=1;i<=n;i++) scanf("%i",&v[i]);
    scanf("%i",&m);
    v[n+1]=INT_MAX;
    for (i=1;i<=m;i++)
    {
        scanf("%i%i",&p,&x);
        if (p==0)
        {
            r=cautare1(1,n+1,x);
            if (v[r-1]==x) printf("%i\n",r-1);
            else printf("-1\n");
        }
        else if (p==1) printf("%i\n",cautare1(1,n+1,x)-1);
        else printf("%i\n",cautare3(1,n,x));
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}