Cod sursa(job #819305)

Utilizator dariusdariusMarian Darius dariusdarius Data 18 noiembrie 2012 19:59:14
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<stdio.h>
int n,a[100005];
void f0(int x)
{
    int st,dr,med,last=-1;
    st=1;dr=n;
    while(st<=dr)
    {
        med=(st+dr)/2;
        if(a[med]==x) {last=med;st=med+1;}
        else
            if(a[med]>x) dr=med-1;
            else st=med-1;
    }
    printf("%d\n",last);
}
void f1(int x)
{
    int st,dr,med,last=-1;
    st=1;dr=n;
    while(st<=dr)
    {
        med=(st+dr)/2;
        if(a[med]<=x) {last=med;st=med+1;}
        else dr=med-1;
    }
    printf("%d\n",last);
}
void f2(int x)
{
    int st,dr,med,last=-1;
    st=1;dr=n;
    while(st<=dr)
    {
        med=(st+dr)/2;
        if(a[med]>=x) {last=med;dr=med-1;}
        else st=med+1;
    }
    printf("%d\n",last);
}
int main()
{
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    int i,m,t,x;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&m);
    for(i=1;i<=m;i++)
        {
            scanf("%d%d",&t,&x);
            if(t==0) f0(x);
            if(t==1) f1(x);
            if(t==2) f2(x);
        }
}