Cod sursa(job #792650)

Utilizator ericptsStavarache Petru Eric ericpts Data 28 septembrie 2012 17:45:31
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <stdio.h>

using namespace std;

int v[100010];

int main()
{
    int n,m,i;
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;++i)
        scanf("%d",&v[i]);
    scanf("%d",&m);
    int tip,x;
    int min,max,med;
    for(i=0;i<m;++i)
    {
        scanf("%d%d",&tip,&x);
        min = 1;
        max = n;
        med = min + (max-min) >> 1;
        while(min < med)
        {
            if(v[med] <= x)
                min = med;
            else
                max = med;
            med = min + (max-min) >> 1;
        }
        if(tip == 0 || tip == 1)
        {
            while(v[med+1] == x)
                ++med;
            if(v[med] != x && tip == 0)
                printf("0\n");
            else
                printf("%d\n",med);
        }
        else
        {
            while(v[med-1] == x)
                --med;
            if(v[med] < x)
                printf("%d\n",med+1);
            else
                printf("%d\n",med);
        }
    }
    return 0;
}