Cod sursa(job #490328)

Utilizator JulotMMihnea M. JulotM Data 6 octombrie 2010 00:04:58
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 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;
    }

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

    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;
    }

    p--;
    if(v[p]<=x)
        return p;

    return 0;
}

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;
    }

    u++;
    if(v[u]>=x)
        return u;

    return 0;
}


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

    int x,caz,m,i;

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

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

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

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