Cod sursa(job #659217)

Utilizator StefanLacheStefan Lache StefanLache Data 10 ianuarie 2012 13:22:20
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include<stdio.h>
int cautare_binara_0(int v[],int st,int dr,int x)
{
    int mij;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(v[mij]<=x)
            st=mij+1;
          else dr=mij-1;
    }
    mij=(st+dr)/2;
    if(v[mij]>x)
        mij--;
    if(v[mij]==x)
        return mij;
    return -1;
}
int cautare_binara_1(int v[],int st,int dr,int x)
{
    int mij;
    while(st<dr)
    {
        mij=(st+dr)/2;
        if(v[mij]<=x)
            st=mij+1;
            else dr=mij;
    }
    mij=(st+dr)/2;
    if(v[mij]>x)
        mij--;
    return mij;
}
int cautare_binara_2(int v[],int st,int dr,int x)
{
    int mij;
    while(st<dr)
    {
        mij=(st+dr)/2;
        if(v[mij]<x)
            st=mij+1;
            else dr=mij;
    }
    mij=(st+dr)/2;
    if(v[mij]<x)
        mij++;
    return mij;
}
int main()
{
    int i,v[100010],n,m,tip,x;
    FILE *f=fopen("cautbin.in","rt");
    FILE *g=fopen("cautbin.out","wt");
    fscanf(f,"%i",&n);
    for(i=1;i<=n;i++)
        fscanf(f,"%i",&v[i]);
    fscanf(f,"%i",&m);
    for(int j=1;j<=m;j++)
    {
        fscanf(f,"%i%i",&tip,&x);
        if(tip==0)
            fprintf(g,"%i\n",cautare_binara_0(v,1,n,x));
        if(tip==1)
            fprintf(g,"%i\n",cautare_binara_1(v,1,n,x));
        if(tip==2)
            fprintf(g,"%i\n",cautare_binara_2(v,1,n,x));
    }
    fclose(f);
    fclose(g);
    return 0;
}