Cod sursa(job #490322)

Utilizator JulotMMihnea M. JulotM Data 5 octombrie 2010 23:40:04
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include "stdio.h"

using namespace std;

int n,v[100];

int cerinta1(int x)
{
    int p,u,m;

    p=1;
    u=n;
    while(p<=u)
    {
        m=(p+u)/2;

        if(v[m]<=x)
            p=m+1;
        else
            u=m-1;
    }

    if(v[p-1]==x)
       return p-1;
    else
        return 1;
}

int cerinta2(int x)
{
    int p,u,m;

    p=1;
    u=n;
    while(p<=u)
    {
        m=(p+u)/2;

        if(v[m]<=x)
            p=m+1;
        else
            u=m-1;
    }


    return p-1;

}

int cerinta3(int x)
{
    int p,u,m;

    p=1;
    u=n;
    while(p<=u)
    {
        m=(p+u)/2;

        if(v[m]<x)
            p=m+1;
        else
            u=m-1;
    }


    return u+1;
}


int main()
{
    FILE* f=fopen("cautbin.in","r");
    FILE* g=fopen("cautbin.out","w");

    int x,caz,M,i;

    fscanf(f,"%i",&n);
    for(i=1;i<=n;i++)
        fscanf(f,"%i",&v[i]);
    fscanf(f,"%i",&M);

    for(i=1;i<=M;i++)
    {
        fscanf(f,"%i %i",&caz,&x);
        switch(caz)
        {
            case 0:
                fprintf(g,"%i\n",cerinta1(x));
                break;

            case 1:
                fprintf(g,"%i\n",cerinta2(x));
                break;

            case 2:
                fprintf(g,"%i\n",cerinta3(x));
                break;
        }
    }
    return 0;
}