Cod sursa(job #1768242)

Utilizator bogdi1bogdan bancuta bogdi1 Data 30 septembrie 2016 16:17:51
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <cstdio>

using namespace std;
int n, v[100005];
int primul(int l, int x)
{
    int i=0;
    int pas=1<<l;
    while(pas!=0){
        if(i+pas <= n && v[i+pas]<=x)
            i+=pas;
        pas/=2;
    }
   return i;
}
int aldoilea(int l, int x)
{
    int i=0;
    int pas=1<<l;
    while(pas!=0){
        if(i+pas<=n && v[i+pas]<=x)
            i+=pas;
        pas/=2;
    }
   return i;
}
int altreilea(int l, int x)
{
    int i=0;
    int pas=1<<l;
    while(pas!=0){
        if(i+pas<=n && v[i+pas]<x)
            i+=pas;
        pas/=2;
    }
   return i+1;
}
int main()
{   freopen("cautbin.in", "r",stdin);
    freopen("cautbin.out", "w",stdout);
    int m,i,j,x,cer,r;
    scanf("%d", &n);
    for(i=1; i<=n; i++)
        scanf("%d", &v[i]);
    scanf("%d", &m);
    for(j=1; j<=m; j++){
        scanf("%d%d", &cer, &x);
        switch(cer){
            case 0:
                r=primul(17, x);
                if(v[r]==x)
                    printf("%d\n", primul(17, x));
                else
                    printf("-1\n");
                break;
            case 1:
                printf("%d\n", aldoilea(17, x));
                break;
            case 2:
                printf("%d\n", altreilea(17, x));
                break;
        }
    }
    return 0;
}