Cod sursa(job #528054)

Utilizator DanceKrissCristian Oancea DanceKriss Data 1 februarie 2011 20:45:48
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.69 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,oky;

    for(i=1;i<=m;i++)
    {
        cin>>op>>x;
        smile=binar(1,n,x);
        if(op==0)
            {


                if(smile==-1) printf("%d\n",smile);
                    else
                        {

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

                        }
            }

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

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

                 if(oky!=j-1)
                    printf("%d\n",j-1);
                 else printf("%d\n",oky+1);
            }


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

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

                if(oky!=j+1)
                 printf("%d\n",j+1);
                else printf("%d\n",oky-1);
            }
    }

}


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