Cod sursa(job #3260773)

Utilizator RichardChessBibire David-Alexandru RichardChess Data 3 decembrie 2024 17:19:34
Problema Cautare binara Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int v[100001];

int bin0(int n, int val){
    int p, i=1;
    for(p=1; p <= n; p*=2);
    p/=2;
    while(p>0){
        if(i+p <= n && v[i+p] <= val){
            i+=p;
        }
        p/=2;
    }
    if(v[i]==val){
        return i;
    }
    else{
        return -1;
    }
}

int bin1(int n, int val){
    int p, i=1;
    for(p=1; p <= n; p*=2);
    p/=2;
    while(p>0){
        if(i+p <= n && v[i+p] <= val){
            i+=p;
        }
        p/=2;
    }
    return i;
}

int bin2(int n, int val){
    int p, i=1;
    for(p=1; p <= n; p*=2);
    p/=2;
    while(p>0){
        if(i+p <= n && v[i+p] < val){
            i+=p;
        }
        p/=2;
    }
    return i+1;
}

int main() {
    int n, M, x, cer;
    f>>n;
    for (int i=1; i<=n; i++){
        f>>v[i];
    }
    f>>M;
    for(int i=1; i<=M; i++){
        f>>cer>>x;
        if(cer==0){
            g<<bin0(n, x);
        }
        if(cer==1){
            g<<bin1(n, x);
        }
        if(cer==2){
            g<<bin2(n, x);
        }
        g<<"\n";
    }

    return 0;
}