Cod sursa(job #1430286)

Utilizator dumbraveanbDumbravean Bogdan dumbraveanb Data 8 mai 2015 08:13:11
Problema Cautare binara Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>

using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

int n, m, A[100001], x, c, a;

int main()
{
    fin >> n;
    for(int i = 1; i <= n; i++) fin >> A[i];
    fin >> m;
    for(int k = 1; k <= m; k++)
    {
        fin >> c >> x;
        if(c == 0)
        {
            a= x + 1;
            int sol = 0, pas = 1;
            while(pas <= n) pas *= 2;
            for(; pas; pas /= 2)
                if(sol + pas <= n && A[sol + pas] <= a)
                sol += pas;
            if(A[sol] == x) fout << sol << '\n';
            else fout << -1 << '\n';
        }
        else if(c == 1)
        {
            int sol = 0, pas = 1;
            while(pas <= n) pas *= 2;
            for(; pas; pas /= 2)
                if(sol + pas <= n && A[sol + pas] <= x)
                sol += pas;
            if(A[sol] <= x) fout << sol << '\n';
            else fout << -1 << '\n';
        }
        else
        {
            a = x - 1;
            int sol = 0, pas = 1;
            while(pas <= n) pas *= 2;
            for(; pas; pas /= 2)
                if(sol + pas <= n && A[sol + pas] <= a)
                sol += pas;
            fout << sol + 1 << '\n';
        }
    }
    return 0;
}