Cod sursa(job #2663416)

Utilizator metallidethantralayerIon Cojocaru metallidethantralayer Data 26 octombrie 2020 12:42:42
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.47 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n,v[100005],m;

int main()
{
    f>>n;
    for(int i=1; i<=n; i++)
        f>>v[i];
    f>>m;
    while(m--)
    {
        int cer,x;
        f>>cer>>x;
        assert(cer==0||cer==1||cer==2);
        if(!cer)
        {
            int st=1,dr=n,poz=-1;
            while(st<=dr)
            {
                int mi=(st+dr)>>1;
                if(v[mi]<=x)
                {
                    if(v[mi]==x)
                        poz=mi;
                    st=mi+1;
                }
                else
                    dr=mi-1;
            }
            g<<poz<<'\n';
        }
        else if(cer==1)
        {
            int st=1,dr=n,poz=-1;
            while(st<=dr)
            {
                int mi=(st+dr)>>1;
                if(v[mi]<=x)
                {
                    poz=mi;
                    st=mi+1;
                }
                else
                    dr=mi-1;
            }
            g<<poz<<'\n';
        }
        else
        {
            int st=1,dr=n,poz=-1;
            while(st<=dr)
            {
                int mi=(st+dr)>>1;
                if(v[mi]>=x)
                {
                    poz=mi;
                    dr=mi-1;
                }
                else
                    st=mi+1;
            }
            g<<poz<<'\n';
        }
    }
    return 0;
}