Cod sursa(job #2034684)

Utilizator GiosinioGeorge Giosan Giosinio Data 8 octombrie 2017 12:17:52
Problema Cautare binara Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>
using namespace std;

ifstream f("cautbin.in");
ofstream g("cautbin.out");

int caut0(unsigned int N,unsigned int v[100001],unsigned int x)
{

    unsigned int i=1,j=N,m;
    while(i<=j)
    {
        m=(i+j)/2;
        if(v[m]<=x)
            i=m+1;
        else
            j=m-1;
    }
    m=(i+j)/2;
    if(v[m]>x)
        x--;
    if(v[m]==x)
        return m;
    return -1;
}

int caut1(unsigned int N,unsigned int v[100001],unsigned int x)
{
    unsigned int i=1,j=N,m;
    while(i<j)
    {
        m=(i+j)/2;
        if(v[m]<=x)
            i=m+1;
        else
            j=m;
    }
    if(v[m]>x) m--;
     return m;
}

int caut2(unsigned int N,unsigned int v[100001],unsigned int x)
{
    unsigned int i=1,j=N,m;
    while(i<j)
    {
        m=(i+j)/2;
        if(v[m]>=x)
            j=m;
        else
            i=m+1;
    }
    m=(i+j)/2;
    if(v[m]<x) m++;
    return m;
}
int main()
{
    unsigned short int tip;
    unsigned int N,M,k,x,intreb;
    f>>N;
    unsigned int v[N+1];
    for(k=1;k<=N;k++)
        f>>v[k];
    f>>M;
    for(intreb=1;intreb<=M;intreb++)
    {
        f>>tip>>x;
        if(tip==0)
            g<<caut0(N,v,x)<<"\n";
        else if(tip==1)
            g<<caut1(N,v,x)<<"\n";
        else
            g<<caut2(N,v,x)<<"\n";

    }
}