Cod sursa(job #2278715)

Utilizator BanescuEduard123Banescu Eduard BanescuEduard123 Data 8 noiembrie 2018 14:53:55
Problema Cautare binara Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.77 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("cautbin.in");
ofstream g("cautbin.out");

int main()
{
    int n,i,a[100005],x,y,m;
    f>>n;
    for(i=1; i<=n; i++)
        f>>a[i];
    f>>m;

    for(i=1; i<=m; i++)
    {
        f>>x>>y;
        if(x==0)
        {
            int st=1,dr=n,mid;
            while(st<=dr)
            {
                mid=(st+dr)/2;
                if(a[mid]==y)
                    dr=mid-1;
                else
                    st=mid+1;
            }
            while(a[st]==y)
                st++;
            if(a[st-1]!=y)
                g<<-1<<endl;
            else
                g<<st-1<<endl;
        }

        if(x==1)
        {
            int st=1,dr=n,mid;
            while(st<=dr)
            {
                mid=(st+dr)/2;
                if(a[mid]>y)
                    dr=mid-1;
                else
                    st=mid+1;
            }
            if(a[st]==y)
            {
                while(a[st]==y)
                    st++;
                g<<st-1<<endl;
            }
            else
            {
            st--;
            while(a[st]>y)
                st--;
            g<<st<<endl;
            }

        }
         if(x==2)
        {
            int st=1,dr=n,mid;
            while(st<=dr)
            {
                mid=(st+dr)/2;
                if(a[mid]<y)
                    st=mid+1;
                else
                    dr=mid-1;
            }
            if(a[st]==y)
                g<<st<<endl;
            else
            {
                st--;
                while(a[st]>y)
                    st--;
                g<<st+1<<endl;

            }
        }

    }
    return 0;
}