Cod sursa(job #2812211)

Utilizator DanSerbanDan Serban DanSerban Data 4 decembrie 2021 10:48:39
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.07 kb
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
    ifstream fin("cautbin.in");
    ofstream fout("cautbin.out");
    int N;
    fin>>N;
    int v[N];
    for(int i=0; i<N; i++)
    {
        fin>>v[i];
    }
    int M;
    fin>>M;
    int c[M], x[M];
    for(int i=0; i<M; i++)
    {
        fin>>c[i]>>x[i];
        if(c[i]==0)
        {
            int lf=0;
            int rg=N-1;
            int ans=-1;
            while(lf<=rg)
            {
                int med=(lf+rg)/2;
                if(v[med]<=x[i])
                {
                    ans=med;
                    lf=med+1;
                }
                else
                {
                    rg=med-1;
                }
            }
            if(v[ans]==x[i])
            {
                fout<<ans+1<<'\n';
            }
            if(v[ans]<x[i])
            {
                fout<<-1<<'\n';
            }
        }
        if(c[i]==1)
        {
            int lf=0;
            int rg=N-1;
            int ans=-1;
            while(lf<=rg)
            {
                int med=(lf+rg)/2;
                if(v[med]<=x[i])
                {
                    ans=med;
                    lf=med+1;
                }
                else
                {
                    rg=med-1;
                }
            }
            fout<<ans+1<<'\n';
        }
        if(c[i]==2)
        {
            int lf=0;
            int rg=N-1;
            int ans=-1;
            while(lf<=rg)
            {
                int med=(lf+rg)/2;
                if(v[med]<x[i])
                {
                    ans=med;
                    lf=med+1;
                }
                else
                {
                    rg=med-1;
                }
            }
            if(v[ans]==x[i])
            {
                fout<<ans+1<<'\n';
            }
            if(v[ans]<x[i])
            {
                fout<<ans+2<<'\n';
            }
        }
    }
    fin.close();
    fout.close();
    return 0;
}