Cod sursa(job #1606347)

Utilizator Vlad1111Sbengheci Vlad-Andrei Vlad1111 Data 20 februarie 2016 10:06:55
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <iostream>
#include <cstdio>
#include <vector>

using namespace std;

vector<int>a;
int step,st;
int n,m,x,i,y;

int cau1()
{
    for(i=0,st=step; st; st>>=1)
        if(i+st<n && a[i+st]<=y)
            i+=st;
    if(a[i]==y || x!=0)
        return i+1;
    else return -1;
}

int cau2()
{
    for(i=n,st=step; st; st>>=1)
        if(i-st>=0 && a[i-st]>=y)
            i-=st;
    return i+1;
}

int main()
{
    freopen("cautbin.in","r",stdin);
    ///freopen("cautbin.out","w",stdout);

    scanf("%d",&n);

    for(step=1; step<n; step<<=1);

    for(i=0; i<n; i++)
    {
        scanf("%d",&m);
        a.push_back(m);
    }

    scanf("%d",&m);


    for(int opr=0; opr<m; opr++)
    {
        scanf("%d",&x);
        scanf("%d",&y);
        if(x<2)
            printf("%d\n",cau1());
        else printf("%d\n",cau2());
    }
    return 0;
}