Cod sursa(job #528017)

Utilizator DanceKrissCristian Oancea DanceKriss Data 1 februarie 2011 20:01:54
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <iostream>
#include<stdio.h>

using namespace std;

const int lg=100001;

int v[lg],n,m;

void read()
{
    int i;
    cin>>n;
    for(i=1;i<=n;i++)
        cin>>v[i];

    cin>>m;
}

int binar(int low,int high,int x)
{
    long int mid=(low+high)/2;
    if(low>high) return -1;
        else
        if(v[mid]==x) return mid;
            else if(x>v[mid]) return binar(mid+1,high,x);
                    else return binar(low,mid-1,x);

}


void solve()
{
    int i,j,op,x,smile;

    for(i=1;i<=m;i++)
    {
        cin>>op>>x;

        if(op==0)
            {
                smile=binar(1,n,x);

                if(smile==-1) printf("%d\n",smile);
                    else
                        {
                            j=smile+1;
                            while(v[j]==x) j++;
                            printf("%d\n",j-1);
                        }
            }

        if(op==1)
            {
                smile=binar(1,n,x);

                 j=smile+1;
                 while(v[j]==x) j++;

                 printf("%d\n",j-1);


            }


        if(op==2)
            {
              smile=binar(1,n,x);

                 j=smile-1;
                 while(v[j]==x) j--;

                 printf("%d\n",j+1);


            }
    }

}


int main()
{
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    read();
    solve();
    return 0;
}