Cod sursa(job #1953092)

Utilizator kevtatarKevin Tatar kevtatar Data 4 aprilie 2017 17:20:23
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <fstream>

using namespace std;

int a[100000],n;

ifstream f("cautbin.in");
ofstream g("cautbin.out");

int valmax(int x){
    int lo = -1, hi = n, mid;
    while(hi-lo != 1){
        mid = (hi+lo)/2;
        if(a[mid] > x){
            hi = mid;
        }
        else{
            lo = mid;
        }
    }
    return lo;
}

int valmin(int x){
    int lo = -1, hi = n, mid;
    while(hi-lo != 1){
        mid = (hi+lo)/2;
        if(a[mid] >= x){
            hi = mid;
        }
        else{
            lo = mid;
        }
    }
    return hi;
}

int main()
{
    int nrr;

    f >> n;
    for(int i = 0; i < n; i++){
        f >> a[i];
    }
    f >> nrr;
    int val,x,poz;
    for(int i = 0; i < nrr; i++){
        f >> val >> x;
        switch(val){
            case 0: poz = valmax(x);
                    if(a[poz] != x){
                        g << -1 << "\n";
                    }
                    else g << poz+1 << "\n";
                    break;
            case 1: g << valmax(x)+1 << "\n"; break;
            case 2: g << valmin(x)+1 << "\n"; break;
        }
    }
    return 0;
}