Cod sursa(job #1495438)

Utilizator calinbritacalin brita calinbrita Data 3 octombrie 2015 08:46:51
Problema Cautare binara Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.42 kb
#include <stdio.h>
#include <stdlib.h>
int v[100001];

int cautare0 (int st, int dr, int el) {
    int mij;

    while (st <= dr) {
        mij = (st + dr) / 2;
        if (v[mij] <= el)
            st = mij + 1;
        else
            dr = mij - 1;
    }

    mij= (st + dr) / 2;

    if (v[mij] > el)
        mij --;
    if (v[mij] == el)
        return mij;
    return -1;
}

int cautare1 (int st, int dr, int el) {
    int mij;

    while (st < dr) {
        mij = (st + dr) / 2;
        if (v[mij] <= el)
            st = mij + 1;
        else
            dr = mij;
    }

    mij= (st + dr) / 2;

    if (v[mij] > el)
        mij--;
        return mij;
}

int cautare2 (int st, int dr, int el) {
    int mij;

    while (st < dr) {
        mij = (st + dr) / 2;
        if (v[mij] < el)
            st = mij + 1;
        else
            dr = mij;
    }

    mij= (st + dr) / 2;

     if (v[mij] < el)
        mij++;
        return mij;
}
int main()
{   int n,m,i,x,y;

    scanf("%d",&n);

    for(i=1;i<=n;i++){
        scanf("%d",&v[i]);
    }

    scanf("%d",&m);

    while(m){
            scanf("%d%d",&x,&y);
            if(x==0)
                printf("%d\n",cautare0(1,n,y));
            if(x==1)
                printf("%d\n",cautare1(1,n,y));
            if(x==2)
                printf("%d\n",cautare2(1,n,y));
        m--;
    }

    return 0;
}