Cod sursa(job #2340942)

Utilizator daria_stoianStoian Daria Alexandra daria_stoian Data 11 februarie 2019 12:24:35
Problema Cautare binara Scor 80
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.72 kb
#include <stdio.h>
#include <stdlib.h>

int v[100001];
int n, m, i, a, b, st, dr, mij, rez;

int c1( int n, int b )
{
    rez = -1;
    st = 1;
    dr = n;
    while ( st < dr )
    {
        mij = ( st + dr ) / 2;
        if ( v[mij] > b )
        {
            dr = mij;
        }
        else
        {
            st = mij + 1;
        }
    }
    st--;
    if ( v[st] == b )
    {
        return st;
    }
    return -1;
}

int c2( int n, int b )
{
    if (v[n] <= b)
    {
        return n;
    }
    rez = -1;
    st = 1;
    dr = n;
    while ( st < dr )
    {
        mij = ( st + dr ) / 2;
        if ( v[mij] > b )
        {
            dr = mij;
        }
        else
        {
            st = mij + 1;
        }
    }
    return st - 1;
}

int c3( int n, int b )
{
    rez = -1;
    st = 1;
    dr = n;
    while ( st < dr )
    {
        mij = ( st + dr ) / 2;
        if ( v[mij] >= b )
        {
            dr = mij;
        }
        else
        {
            st = mij + 1;
        }
    }
    return st;
}

int main()
{
    FILE *fin, *fout;
    fin = fopen ( "cautbin.in", "r" );
    fout = fopen ( "cautbin.out", "w" );
    fscanf( fin, "%d", &n );
    for ( i = 1; i <= n; i ++ )
        fscanf( fin, "%d", &v[i] );
    fscanf( fin, "%d", &m );
    for ( i = 0; i < m; i ++ )
    {
        fscanf( fin, "%d%d", &a, &b );
        if ( a == 0 )
        {
            rez = c1( n, b );
            fprintf( fout, "%d\n", rez );
        }
        else if ( a == 1 )
        {
            rez = c2( n, b ) ;
            fprintf( fout, "%d\n", rez );
        }
        else if ( a == 2 )
        {
            rez = c3( n, b );
            fprintf( fout, "%d\n", rez );
        }
    }
    fclose ( fin );
    fclose ( fout );
    return 0;

}