Cod sursa(job #1308601)

Utilizator bogdanciurezubogdan ciurezu bogdanciurezu Data 4 ianuarie 2015 14:31:32
Problema Cautare binara Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
#define nmax 100000

using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int N, v[nmax], M;
int cautareBinara(int x, int cerinta){
    int i, S;
    for(S = 1 ; S <= N ; S <<= 1);
    for(i = 1; S; S >>= 1){
        if(v[S + i] <= x && S + i < N)
            i += S;
    }
    switch (cerinta){
        case 0 : {if(v[i] == x) return i; return -1;} break;
        case 1 : {return i;} break;
        case 2 : {
            if(v[i] == x){ while(v[i] == x) --i; return i + 1;}
            return i + 1;
        }
    }
}
int main()
{int i, nr, c;
    f>>N;
    for(i = 1; i <= N; ++i)
        f>>v[i];
    f>>M;
    for(i = 1; i <= M; ++i){
        f>>c>>nr;
        g<<cautareBinara(nr, c)<<'\n';
    }
    return 0;
}