Cod sursa(job #1468911)

Utilizator SagunistuStrimbu Alexandru Sagunistu Data 7 august 2015 11:57:52
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <cstdio>
#define nmax 100005
#define inf 0x3f3f3f3f

using namespace std;

int n,m,a[nmax];

int cautbin(int nr)
{
    int m,st=1,dr=n;
    while(st<=dr)
    {
        m=st+(dr-st)/2;
        if(a[m]==nr)
            return m;
        if(a[m]<nr)
        {
            st=m+1;
            continue;
        }
        dr=m-1;
    }
    return st;
}

int main()
{
    int cmd,nr,poz;
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    a[n+1]=inf;
    scanf("%d",&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&cmd,&nr);
        poz=cautbin(nr);
        if(cmd==0)
        {
            while(a[poz+1]==nr)
                poz++;
            if(a[poz]==nr)
                printf("%d\n",poz);
            else
                printf("-1\n");
        }
        else
        if(cmd==1)
        {
            while(a[poz]>nr)
                poz--;
            while(a[poz+1]==nr)
                poz++;
            printf("%d\n",poz);
        }
        else
        {
            while(a[poz-1]==nr)
                poz--;
            printf("%d\n",poz);
        }
    }
    return 0;
}