Cod sursa(job #212521)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 5 octombrie 2008 19:34:02
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 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)/2;
	if(a[k]<x)
	   st=k+1;
	else if(a[k]>x)
	   dr=k-1;
	else if(a[k]==x){
	   while(a[k+1]==x&&k<n)
	   ++k;
	   return k;}}
    return -1;}
int cautbin1(int x){
    int st,dr,k;
    st=1;
    dr=n;
    while(st<=dr){
	k=(st+dr)/2;
	if(a[k]<x)
	   st=k+1;
	else if(a[k]>x)
	   dr=k-1;
	else if(a[k]==x)
	   while(a[k+1]==x&&k<n)
	   ++k;}
    return k-1;}
int cautbin2(int x){
    int st,dr,k;
    st=1;
    dr=n;
    while(st<=dr){
	k=(st+dr)/2;
	if(a[k]<x)
	   st=k+1;
	else if(a[k]>x)
	   dr=k-1;
	else if(a[k]==x){
	   while(a[k-1]==x&&k>0)
          --k;
	   return k+1;}}
    return k;}
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;}