Cod sursa(job #1094280)

Utilizator Cezar_MihalceaCezar Mihalcea Cezar_Mihalcea Data 29 ianuarie 2014 10:37:25
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<stdio.h>
int v[100001],n;
int cautare(int x)
{
    int i=0, pas=1<<16;
    while(pas!=0)
    {
        if(i+pas<=n && v[i+pas]<=x)
            i=i+pas;
        pas=pas/2;
    }
    if(v[i]==x)
        return i;
    else
        return -1;
}
int nn(int x)
{
    int i=0, pas=1<<16;
    while(pas!=0)
    {
        if(i+pas<=n && v[i+pas]<=x)
            i=i+pas;
        pas=pas/2;
    }
    return i;
}
int mm(int x)
{
    int i=0, pas=1<<16;
    while(pas!=0)
    {
        if(i+pas<=n && v[i+pas]<x)
            i=i+pas;
        pas=pas/2;
    }
    return i+1;
}
int main()
{
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    int j,m,l,x;
    scanf("%d",&n);
    for(j=1;j<=n;j++)
        scanf("%d",&v[j]);
    scanf("%d",&m);
    for(j=1;j<=m;j++)
    {
        scanf("%d%d",&l,&x);
        if(l==0)
            printf("%d\n",cautare(x));
        if(l==1)
            printf("%d\n",nn(x));
        if(l==2)
            printf("%d\n",mm(x));
    }
    return 0;
}