Cod sursa(job #2048145)

Utilizator alex.carpCarp Alexandru alex.carp Data 25 octombrie 2017 19:32:36
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.71 kb
#include <fstream>

using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n,m,i,st,sf,x,v[1000],k,M,x1;
int main()
{
    f>>n;
    for(i=1; i<=n; i++)
        f>>v[i];
    f>>M;
    for(i=1; i<=M; i++)
    {
        k=0;
        f>>x1>>x;
        st=1;
        sf=n;
        while(st<sf)
        {
            m=st+(sf-st)/2;
            if(x>v[m])st=m+1;
            if(x<v[m])sf=m-1;
            if(x==v[m])
            {
                k=1;
                break;
            }
        }
        if(x1==0)
        {
            if(k==0)g<<-1;
            else
            {
                while(v[m+1]==x)m++;

                g<<m<<'\n';
            }
        }
        if(x1==1)
        {
            if(k==1)
            {
                while(v[m+1]==x)m++;
                g<<m<<'\n';
            }
            else
            {
                if(x>v[m])
                {
                    while(v[m+1]==v[m])m++;
                    g<<m<<'\n';
                }
                if(x<v[m])
                {
                    while(v[m-1]==v[m])m--;
                    g<<m-1<<'\n';
                }
            }
        }
        if(x1==2)
        {
            if(k==1)
            {
                while(v[m-1]==x)m--;
                g<<m<<'\n';
            }
            else
            {
                if(x>v[m])
                {
                    while(v[m+1]==v[m])m++;
                    g<<m+1<<'\n';
                }
                if(x<v[m])
                {
                    while(v[m-1]==v[m])m--;
                    g<<m<<'\n';
                }
            }
        }
    }

    return 0;
}