Cod sursa(job #372441)

Utilizator raica_cristiraica dumitru cristian raica_cristi Data 10 decembrie 2009 10:00:49
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.01 kb
#include<stdio.h>
#define dim 100100

int a[dim],n,m,i,k;
int caut1(int x)
{
    int st=1,dr=n;
    int p=(st+dr)/2;
    while(st<=dr)
    {
                 p=(st+dr)/2;
                 if(a[p]<x)
                 st=p+1;
                 else
                 if(a[p]>x)
                 dr=p-1;
                  if(a[p]==x)
                {
                     while(a[p+1]==x)
                 p++;
                 return p;

                 }}
                 return -1;
}
int caut2(int x)
{
    int st=1,dr=n,p=(st+dr)/2;
    while(st<dr)
    {            
                 p=(st+dr)/2;
                 if(a[p]<x)
                 st=p+1;
                 else
                 if(a[p]>x)
                 dr=p-1;
                 else
                 {
                     while(a[p+1]==x)
                 p++;
                 return p;

                 }
                 
                 }
    return p-1;
}
int caut3(int x)
{
    int st=1,dr=n,p=(st+dr)/2;
    while(st<dr)
    {            
                 p=(st+dr)/2;
                 if(a[p]<x)
                 st=p+1;
                 else
                 if(a[p]>x)
                 dr=p-1;
                 else
                 {
                     while(a[p-1]==x)
                     p--;
                     return p;
                 
                 }}
    return p+1;
}
void read()
{
     scanf("%d",&n);
     for(int i=1;i<=n;i++)
     scanf("%d",&a[i]);
     
}
void solve()
{
     int x,y;
     scanf("%d",&m);
     for(int i=1;i<=m;i++)
     {
             scanf("%d%d",&x,&y);
             if(x==0)
             printf("%d\n",caut1(y));
             if(x==1)
             printf("%d\n",caut2(y));
             if(x==2)
             printf("%d\n",caut3(y));
                    }
                              
}
int main ()
{
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    int n,i,k,m;
    read();
    solve();
    return 0;
}