Cod sursa(job #1768237)

Utilizator bogdi1bogdan bancuta bogdi1 Data 30 septembrie 2016 16:12:13
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 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;
    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:
                printf("%d\n", primul(17, x));
                break;
            case 1:
                printf("%d\n", aldoilea(17, x));
                break;
            case 2:
                printf("%d\n", altreilea(17, x));
                break;
        }
    }
    return 0;
}