Cod sursa(job #1070474)

Utilizator roby2001Sirius roby2001 Data 1 ianuarie 2014 06:51:27
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.44 kb
/*
          ~Keep It Simple!~
*/
  
#include <stdio.h>
#include <stdlib.h>
int n,v[100001];
 
 
int binarysearch0(int x)
{
    int i=1,j=n,mid;
    while(i<=j)
    {
        mid = (i+j)/2;
        if( v[mid] <= x )
            i = mid+1;
        else
            j = mid-1;
    }
    mid = (i+j)/2;
    if( v[mid] > x ) mid--;
    if(v[mid] == x ) 
        return mid;
    return -1;
}
 
int binarysearch1(int x)
{
    int i=1,j=n,mid;
    while(i<j)
    {
        mid = (i+j)/2;
         if( v[mid]<=x )
             i = mid+1;
         else
             j = mid;
    }
    mid = (i+j)/2;
    if(v[mid] > x) mid--;
    return mid;
}
 
int binarysearch2(int x)
{
    int i=1,j=n,mid;
    while(i<j)
    {       
        mid = (i+j)/2;
         if( v[mid] < x )
             i = mid+1; 
         else
             j = mid;   
    }
    mid = ( i+j)/2;
    if(v[mid] < x)
    mid ++;
    return mid;
    }
int main()
{
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
 
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&v[i]);
    int m,x,y;
    scanf("%d",&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%d %d",&x,&y);
        if( x == 0 )
            printf("%d\n",binarysearch0(y));
        else if ( x == 1 )
            printf("%d\n",binarysearch1(y));
        else if ( x == 2 )
            printf("%d\n",binarysearch2(y));
    }
    exit(0);
}