Cod sursa(job #1602180)

Utilizator leopop29Pop Leonard leopop29 Data 16 februarie 2016 17:10:48
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
//#include <iostream>
#include <fstream>

using namespace std;

int v[100005], n, m;

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

void c(int x, int par)
{
    int l = 1, r = n, mid;
    while(l < r)
    {
        mid = (l+r+1)/2;
        //cout << l << ' ' << r  << ' ' << mid << '\n';
        if(v[mid] > x)
            r = mid-1;
        else
            l = mid;
    }

    switch(par)
    {
        case 0:{if(v[l] != x) cout << -1 << '\n'; else cout << l << '\n'; break;}
        case 1:{cout << l << '\n'; break;}
        case 2:{if(v[l] == x) cout << l << '\n'; else cout << l+1 << '\n'; break;}
    }
}

void c_2(int x)
{
    int ma = -1, l = 1, r = n, mid;
    while(l < r)
    {
        mid = (l+r)/2;
        if(v[mid] >= x)
            r = mid;
        else
            l = mid+1;
    }
    cout << l;
}

int main()
{

    f >> n;
    for(int i = 1; i <= n; ++i)
        f >> v[i];
    f >> m;

    for(int i = 1; i <= m; ++i)
    {
        int x, y;
        f >> x >> y;
        switch(x)
        {
            case 0:{c(y, 0); break;}
            case 1:{c(y, 1); break;}
            case 2:{c_2(y); break;}
        }
    }
    return 0;
}