Cod sursa(job #1993591)

Utilizator Gigel-FroneGigel Fronel Gigel-Frone Data 23 iunie 2017 12:22:09
Problema Cautare binara Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.8 kb
#include <cstdio>
#define NMax 100001

using namespace std;

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

    int n;
    scanf("%d", &n);
    int v[NMax];
    for(int i=1; i<=n; i++) scanf("%d", &v[i]);
    int m;
    scanf("%d", &m);
    for(int i=1; i<=m; i++) {
        int type, value;
        scanf("%d%d", &type, &value);

        if(type == 0) {
            int left = 1, right = n, mid;
            while(left <= right) {
                mid = left + (right - left) / 2;
                if(v[mid] <= value)
                    left = mid + 1;
                else
                    right = mid - 1;
            }
            mid = left + (right - left) / 2;
            if(v[mid] > value)
                mid--;
            if(v[mid] == value)
                printf("%d\n", mid);
            else
                printf("-1\n");
        }

        else if(type == 1) {
            int left = 1, right = n, mid;
            while(left < right) {
                mid = left + (right - left) / 2;
                if(v[mid] <= value)
                    left = mid + 1;
                else
                    right = mid;
            }
            mid = left + (right - left) / 2;
            if(v[mid] > value)
                mid--;
            printf("%d\n", mid);
        }
        else if(type == 2) {
            int left = 1, right = n, mid;
            while (left < right) {
                mid = left + (right - left) / 2;
                if(v[mid] < value)
                    left = mid + 1;
                else
                    right = mid;
            }
            mid = left + (right - left) / 2;
            if(v[mid] < value)
                mid++;
            printf("%d\n", mid);
        }
    }
}