Cod sursa(job #2494227)

Utilizator IustinHoratiuIustin Horatiu IustinHoratiu Data 17 noiembrie 2019 16:05:48
Problema Cautare binara Scor 0
Compilator cpp-32 Status done
Runda Arhiva educationala Marime 1.64 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int main()
{
    int n,x;
    fin >> n;
    int a[n+1];
    for (int i=1;i<=n;i++)
    {
        fin >> a[i];
    }
    fin >> x;
    int b[x+1],c[x+1];
    for (int i=1;i<=x;i++)
    {
        fin >> c[i];
        fin >> b[i];
        int mid,ans,st,dr;
        st=1;
        dr=n;
        mid=(st+dr)/2+(st+dr)%2;
        if (c[i]==0)
        {
            ans=-1;
            while (st<=dr)
            {
                if (a[mid]>b[i])
                {
                    dr=mid-1;
                }
                else
                {
                    st=mid+1;
                    if (a[mid]==b[i]) ans=mid;
                }
                mid=(st+dr)/2 + (st+dr)%2;
            }
            fout << ans << endl;
        }
        else if (c[i]==1)
        {
            while (st<dr)
            {
                if (a[mid]>b[i])
                {
                    dr=mid-1;
                }else
                {
                    st=mid;
                    ans=mid;
                }
                mid=(st+dr)/2+ (st+dr)%2;
            }
            fout << ans << endl;
        }
        else
        {
            while (st<dr)
            {
                if (a[mid]>=b[i])
                {
                    dr=mid;
                    ans=mid;
                }else
                {
                    st=mid+1;
                }
                mid=(st+dr)/2;
            }
            fout << ans << endl;
        }
    }
    return 0;
}