Cod sursa(job #1871933)

Utilizator adnicolaeAdrian Danut Nicolae adnicolae Data 7 februarie 2017 19:23:15
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <cstdio>

#define NMAX (100000 + 4)

using namespace std;

int v[NMAX], N, M, x, caz;

int cautbin(int x)
{
    int start =0, step = 1;
    for(; step<=N; step<<=1);
    for(; step; step>>=1)
    {
        int index = start + step;
        if(index > N) continue;
        if(v[index] <= x) start = index;
    }
    return start;
}

int main() {

   freopen("cautbin.in", "r", stdin);
   freopen("cautbin.out", "w", stdout);

   scanf("%d", &N);
   for(int i=1; i<=N; ++i)
   {
       scanf("%d", &v[i]);

   }
   scanf("%d", &M);


   while(M>0)
   {
       --M;
       scanf("%d %d", &caz, &x);
       switch(caz)
       {
            case 0:
            if(v[cautbin(x)] == x)
            {
             printf("%d\n", cautbin(x));
            }
            else
             printf("-1");
                break;

            case 1:
            printf("%d\n", cautbin(x));
            break;

            case 2:
            if(v[cautbin(x)] == x)
            {
                printf("%d\n", cautbin(x-1)+1);
            }
            else
                printf("%d\n", cautbin(x)+1);
            break;
       }
   }

    return 0;
}