Cod sursa(job #1521930)

Utilizator taureteTauru Mihai taurete Data 10 noiembrie 2015 23:47:42
Problema Cautare binara Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.18 kb
#include <stdio.h>
#include <stdlib.h>
# define N 100010
int n,i,A[101];
int cauta(int p, int u, int k)
{ int m;
    while (p<=u)
    {
        m=(p+u)/2;
        if (A[m]<k) p=m+1;
           else u=m-1;
    }
    m=(p+u)/2;
     if (A[m]==k) return m;
      else return -1;
      if (A[m]>k) m--;
}
int cauta1(int p, int u, int k)
{
    int m,n=u;
       while (p<=u)
    {
        m=(p+u)/2;
        if (A[m]<k) p=m+1;
           else u=m;
    }
    m=(p+u)/2;
    if (A[m]<k) m++;
    return m;

}
int cauta2(int p, int u, int k)
{
    int m;
       while (p<=u)
    {
        m=(p+u)/2;
        if (A[m]<k) p=m+1;
           else u=m;
    }
    m=(p+u)/2;
    if (A[m]>k) m--;
    return m;
}
int main()
{
    int i, n, m, tip, val;
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    scanf("%d", &n);
    for (i=0;i<n;i++)
        scanf("%d", &A[i]);
    scanf("%d", &m);
    while (m--)
    {
        scanf("%d%d", &tip,&val);
           if (tip==0) printf("%d\n",cauta(1,n,val));
           if (tip==1) printf("%d\n",cauta1(1,n,val));
           if (tip==2) printf("%d\n",cauta2(1,n,val));
    }
return 0;
}