Cod sursa(job #2210784)

Utilizator vladm98Munteanu Vlad vladm98 Data 7 iunie 2018 22:19:37
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>


using namespace std;
//Se dă un vector x cu n elemente numere naturale, ordonate crescător,
//și un vector y cu m elemente, de asemenea numere naturale. Verificați pentru fiecare element al vectorului y dacă apare în x
int a[100001];
int cautarebinara (int val, int n){
    int pos=0;
    for(int bit=20;bit>=0;bit--)
        if((pos +(1 <<bit) <=n) and (a[pos +(1<<bit)] <= val))
            pos+=(1 << bit);
    return pos;
}
int main()
{
    int tip,N,M,x;
    ifstream f("cautbin.in");
    ofstream g("cautbin.out");
    f>>N;
    for(int i=1;i<=N;i++)
        f>>a[i];
    f>>M;
    for(int i=1;i<=M;i++){
        f>>tip>>x;
        if(tip==0){
            int poz;
            poz=cautarebinara(x,N);
            if(a[poz]==x)
                g<<poz<<endl;
            else
                g<<"-1"<<endl;

        }
        if(tip==1){
            g<<cautarebinara(x,N)<<endl;
        }
        if(tip==2){
            g<<cautarebinara(x-1,N)+1<<endl;
        }
    }
    f.close();
    return 0;