Cod sursa(job #1839520)

Utilizator SagunistuStrimbu Alexandru Sagunistu Data 3 ianuarie 2017 00:06:54
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#include <cstdio>

using namespace std;

int n,a[100005],m;

int caut_bin(int x)
{
    int li=1,lf=n,m;
    while(li<=lf)
    {
        m=(li+lf)/2;
        if(a[m]==x)
            return m;
        if(a[m]<x)
        {
            li=m+1;
            continue;
        }
        lf=m-1;
    }
}

int main()
{
    int t,nr;
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    cin>>m;
    for(int i=1;i<=m;i++)
    {
        cin>>t>>nr;
        int cb=caut_bin(nr);
        if(t==0)
        {
            if(a[cb]==nr)
            {
                while(a[cb]==nr)
                    cb++;
                cout<<cb-1<<"\n";
            }
            else
                cout<<-1<<"\n";
        }
        else
        if(t==1)
        {
            if(a[cb]==nr)
            {
                while(a[cb]==nr)
                    cb++;
                cout<<cb-1<<"\n";
            }
            else
                cout<<cb<"\n";
        }
        else
        {
            if(a[cb]==nr)
            {
                while(a[cb]==nr)
                    cb--;
                cout<<cb+1<<"\n";
            }
            else
                cout<<cb+1<"\n";
        }
    }
    return 0;
}