Cod sursa(job #2768461)

Utilizator ionanghelinaIonut Anghelina ionanghelina Data 10 august 2021 20:45:04
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.9 kb
#include<bits/stdc++.h>
using namespace std;
int n,v[100005],x,op,m;

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

int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i];


    fin>>m;

    for(int i=1;i<=m;i++)
    {
        fin>>op>>x;

        if(op==0)
        {
            int st=1;
            int dr=n;
            int sol=-1; //Initial nu am gasit nicio solutie
            while(st<=dr)
            {
                int mid=(st+dr)/2;
                if(v[mid]==x) //Am gasit o pozitie buna, dar vrem sa vedem daca este si una mai mare
                {
                    sol=mid;
                    st=mid+1;
                }
                    else
                if(v[mid]<x)
                    st=mid+1;
                    else dr=mid-1;
            }

            fout<<sol<<'\n';
        }
            else
        if(op==1)
        {
            int st=1;
            int dr=n;
            int sol=-1; //Initial nu am gasit nicio solutie
            while(st<=dr)
            {
                int mid=(st+dr)/2;
                if(v[mid]<=x) //Am gasit o pozitie buna, dar vrem sa vedem daca este si una mai mare
                {
                    sol=mid;
                    st=mid+1;
                }
                    else
                dr=mid-1;
            }

            fout<<sol<<'\n';
        }
            else
        if(op==2)
        {
            int st=1;
            int dr=n;
            int sol=-1;
            while(st<=dr)
            {
                int mid=(st+dr)/2;
                if(v[mid]>=x) //Am gasit o pozitie buna, dar vrem sa vedem daca este si una mai mica
                {
                    sol=mid;
                    dr=mid-1;
                }
                    else st=mid+1;
            }

            fout<<sol<<'\n';
        }
    }
    return 0;
}