Cod sursa(job #2552026)

Utilizator foodinatorfoodinator foodinator Data 20 februarie 2020 14:58:10
Problema Cautare binara Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include <iostream>
#include <fstream>
using namespace std;
long long n,i,v[100005],st,dr,x,t,m,k,m1,sol;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int main()
{
    in>>n;
    for (i=1;i<=n;i++)
        in>>v[i];
    in>>m1;
    for (i=1;i<=m1;i++)
    {
        in>>t>>x;
        if (t==0)
        {
            st=1;
            dr=n;
            k=0;
            while (st<=dr)
            {
                m=(st+dr)/2;
                if (v[m]==x)
                {
                    k=1;
                    while (v[m+1]==x&&m+1<=n&&m+1>1) m++;
                    out<<m<<endl;
                    break;
                }
                else if (v[m]<x) st=m+1;
                else dr=m-1;
            }
            if (k==0) out<<-1<<endl;
        }
        else if (t==2)
        {
            st=1;dr=n;
            while (st<=dr)
            {
                m=(st+dr)/2;
                if (v[m]>=x)
                {
                    sol=m;dr=m-1;
                }
                else if (v[m>x]) dr=m-1;
                else st=m+1;

            }out<<sol<<endl;
        }
        else if (t==1)
        {
            st=1;dr=n;
            while (st<=dr)
            {
                m=(st+dr)/2;
                if (v[m]<=x)
                {
                    sol=m;st=m+1;
                }
                else if (v[m]>x) dr=m-1;
                else st=m+1;
            }
            out<<sol<<endl;
        }
    }
}