Cod sursa(job #212543)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 5 octombrie 2008 20:17:18
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include<stdio.h>
int n,m,a[101];
int cautbin0(int x){
    int st,dr,k;
    st=1;
    dr=n;
    while(st<=dr){
        k=st+(dr-st)/2;
	    if(a[k]<x)
	        st=k+1;
	    else if(a[k]>x)
	        dr=k-1;
	    else if(a[k]==x)
	        return k;}
    return -1;}
int cautbin1(int x){
    int st,dr,k,y=0;
    st=1;
    dr=n;
    while(st<=dr){
	    k=st+(dr-st)/2;
	    if(a[k]<=x){
            y=a[k]; 
	        st=k+1;}
	    else
	        dr=k-1;}
	return y;}
int cautbin2(int x){
    int st,dr,k,y=n+1;
    st=1;
    dr=n;
    while(st<=dr){
	    k=st+(dr-st)/2;
	    if(a[k]>=x){
	        y=a[k];
	        dr=k-1;}
	    else
	        st=k+1;}
    return y;}
void solve(){
    int i,q,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",&q,&x);
        if(q==0)
            printf("%d\n",cautbin0(x));
        else if(q==1)
            printf("%d\n",cautbin1(x));
        else if(q==2)
            printf("%d\n",cautbin2(x));}}
int main(){
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    solve();
    return 0;}