Cod sursa(job #549632)

Utilizator emmmiEmanmuel Oancea emmmi Data 8 martie 2011 20:22:37
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include <iostream>
#include<stdio.h>
#define LG 100000

using namespace std;
int n,m,v[LG];
void citire()
{
    int i=1;
    cin>>n;
    while(i<=n) cin>>v[i++];
    cin>>m;
}
int binar( int x )
{
    int m,li=1,ls=n;
    while( li<=ls )
    {
        m = (li+ls)/2;
        if( x==v[m] ) return m;
            else
                if( x<v[m] ) ls = m-1;
                    else  li = m+1;
    }
    return -1;
}
int main()
{
    int i,j,smile,pas;
    freopen("cautabin.in","r",stdin);
    freopen("cautabin.out","w",stdout);
    citire();
    while(m--)
    {
        cin>>i>>j;
        smile = binar(j);
        if( i==0 )
                if( smile>0 )
                    {
                        pas = smile + 1;
                        while(v[pas]==j) pas++;
                        printf("%d\n",pas-1);
                    }
                else printf("-1\n");
        if( i==1 )
            {
                if( v[smile+1] == j )
                    {
                        pas = smile + 1;
                        while(v[pas]==j) pas++;
                        printf("%d\n",pas-1);
                    }
                else printf("%d",smile-1);
            }
        if( i==2 )
            {
                if( j==v[smile-1] )
                {
                    pas = smile - 1;
                    while(v[pas]==j) pas--;
                    printf("%d\n",pas+1);

                }
                else printf("%d\n",smile-1);
            }
    }
    return 0;
}