Cod sursa(job #2841414)

Utilizator Marc_AlexPascal Marc Alexandru Marc_Alex Data 29 ianuarie 2022 18:03:44
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n, cer , x, v[100001];

int rez()
{
    int pas=(1<<16), r=0;///pas=(1 "shift" 16) = 2 la puterea 16=64000<100000
    while(pas)
    {
        if(pas+r<=n && v[pas+r]<=x)///daca pas+r si pozitia lui se incadreaza in zona verde
        {
            r=r+pas;///aici de se face pasul
        }
        pas>>=1;///se muta la dreapta in baza 2
    }
    if(cer==0)
    {
        if(v[r]==x)
            return r;
        else return -1;
    }
    if(cer==1)
        return r;
    if(cer==2)
        return r+1;
}

int main()
{
    fin>>n;
    for(int i=1; i<=n; i++) fin>>v[i];
    int m;
    fin>>m;
    for(int i=1; i<=m; i++)
    {
        fin>>cer>>x;
        if(cer==2)
            x--;///aici il caut pe cel mai din stanga din zona verde
        fout<<rez()<<'\n';
    }
    return 0;
}