Cod sursa(job #680787)

Utilizator repp4raduRadu-Andrei Szasz repp4radu Data 15 februarie 2012 22:04:34
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <cstdio>
#include <algorithm>

#define MAX 100050

using namespace std;
int v[MAX];
int main()
{
    freopen("cautbin.in", "r", stdin);
    freopen("cautbin.out", "w", stdout);
    int n, m, i,operatie, src, *point;
    scanf("%d\n", &n);
    for(i = 0; i < n; i++)
    {
        scanf("%d", &v[i]);
    }
    scanf("%d\n", &m);
    sort(v, v + n);
    for(i = 0 ; i < m; i++)
    {
        scanf("%d %d", &operatie, &src);
        if(operatie == 0)
        {
            point = upper_bound(v, v + n, src);
            point--;
            if(*point == src)
            {
                printf("%d\n", point - v + 1);
            }
        }
        else if(operatie == 1)
        {
            point = lower_bound(v, v + n, src);
            if(*point == src)
            {
                point = upper_bound(v, v + n, src);
                point--;
            }
            printf("%d\n", point - v + 1);
        }
        else
        {
            point = upper_bound(v, v + n, src);
            point--;
            if(*point == src)
            {
                point = lower_bound(v, v + n, src);
            }
            printf("%d\n", point - v + 1);
        }
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}