Cod sursa(job #2037067)

Utilizator AlexandruPaulSirbu Alex AlexandruPaul Data 11 octombrie 2017 17:44:08
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.55 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");

/*int numara(int n, int v[])
{
    int Max = 1;
    int in = 1;
    for(int i=2;i<=n;i++)
    {
        if(v[in] != v[i])
        {
            Max = max(Max, i-in);
            in = i;
        }
    }
    Max = max(Max, n-in + 1);
    return Max;
}*/

int pozitie0(int n, int v[], int x)
{
    int in=1;
    int sf=n;
    while(in<=sf)
    {
        int mij=(in+sf)/2;

        if(v[mij]>x)
            sf=mij-1;
        else
            in=mij+1;

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


int pozitie1(int n, int v[], int x)
{
    int in=1;
    int sf=n;
    while(in<=sf)
    {
        int mij=(in+sf)/2;

        if(v[mij]>x)
            sf=mij-1;
        else
            in=mij+1;

    }

        return sf;

}



int pozitie2(int n, int v[], int x)
{
    int in=1;
    int sf=n;
    while(in<=sf)
    {
        int mij=(in+sf)/2;

        if(v[mij]>=x)
            sf=mij-1;
        else
            in=mij+1;

    }

        return in;

}

int a[100001];

int main()
{
    int n,x,m,t;
    fin>>n;
    for(int i=1;i<=n;i++)
    {
        fin>>a[i];
    }
    fin>>m;
    for(int i=1;i<=m;i++)
    {

        fin>>t>>x;
        if(t==0)
            fout<<pozitie0(n,a,x)<<"\n";

        if(t==1)
            fout<<pozitie1(n,a,x)<<"\n";

        if(t==2)
            fout<<pozitie2(n,a,x)<<"\n";

    }

    return 0;
}