Cod sursa(job #2349127)

Utilizator StefanBadBadila Stefam StefanBad Data 20 februarie 2019 10:39:56
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.25 kb
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    long long int v[100005],n,m,i,caut,x,li,ls,mij,g,j;
    ifstream fin("cautbin.in");
    ofstream fout("cautbin.out");
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>v[i];
    }
    fin>>m;
    for(i=1;i<=m;i++)
    {
        fin>>caut;
        fin>>x;
        if(caut==0)
        {
            li=1;
            ls=n;
            while(li<=ls && !g)
            {
                mij=(li+ls)/2;
                if(v[mij]==x)
                {
                    g=1;
                }
                if(x > v[mij])
                    li=mij+1;
                else
                    ls=mij-1;
            }
            if(g==1)
            {
                j=mij;
                while(v[j]==v[mij] && j<=n)
                    j++;
                fout<<j-1;
            }
            else
                fout<<"-1";
        }
        if(caut==1)
        {
            li=1;
            ls=n;
            while(li<=ls && !g)
            {
                mij=(li+ls)/2;
                if(v[mij]==x)
                {
                    g=1;
                }
                if(x > v[mij])
                    li=mij+1;
                else
                    ls=mij-1;
            }
            if(g==1)
            {
                j=mij;
                while(v[j]==v[mij] && j<=n)
                    j++;
                j--;
                if(v[j-1]<v[j])
                    j++;
                fout<<j;
            }
        }
        if(caut==2)
        {
            li=1;
            ls=n;
            while(li<=ls && !g)
            {
                mij=(li+ls)/2;
                if(v[mij]==x)
                {
                    g=1;
                }
                if(x > v[mij])
                    li=mij+1;
                else
                    ls=mij-1;
            }
            if(g==1)
            {
                j=mij;
                while(v[j]==v[mij] && j<=n)
                    j--;
                j++;
                if(v[j+1]<v[j])
                    j++;
                fout<<j;
            };
        }
    }
    fin.close();fout.close();
    return 0;
}