Cod sursa(job #1751856)

Utilizator Costel_DraghiciDraghici Constantin Costel_Draghici Data 2 septembrie 2016 08:15:23
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <stdio.h>
#define Nmax 100010

using namespace std;
int v[Nmax];
int bsearch0 (int p, int u, int x) {
    int m;

    while (p <= u) {
        m = (p + u)/2;
        if (v[m] <= x)
            p = m + 1;
        else
            u = m - 1;
    }
    m=(p + u)/2;

    if (v[m]>x) m --;
    if (v[m]==x)
        return m;
    return -1;
}

int bsearch1 (int p, int u, int x) {
    int m;

    while (p < u){
        m =(p + u)/2;
        if (v[m] <= x)
            p = m + 1;
        else
            u = m;
    }

    m = (p + u) / 2;
    if (v[m] > x)
       -- m;
    return m;
}

int bsearch2 (int p, int u, int x) {
    int m;

    while (p < u) {
        m = (p + u) / 2;
        if (v[m] < x)
            p = m + 1;
        else
            u = m;
    }

    m = (p + u) / 2;
    if (v[m] < x)
       ++ m;
    return m;
}

int main()
{
    int n,t,tip,val;
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&v[i]);

    scanf("%d",&t);
    while(t --)
    {
      scanf("%d%d",&tip,&val);
      if(tip==0)
      printf("%d\n",bsearch0(1, n, val));
      if(tip==1)
      printf("%d\n",bsearch1(1, n, val));
      if(tip==2)
      printf("%d\n",bsearch2(1, n, val));
    }
}