Cod sursa(job #2045950)

Utilizator Serban2331Foica Serban Serban2331 Data 23 octombrie 2017 09:41:51
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.92 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n,m,v[100003],x[100003],y[100003],i,mij;
void citire()
{
    f>>n;
    for(i=1;i<=n;i++)
    {
        f>>v[i];
    }
    f>>m;
    for(i=1;i<=m;i++)
    {
        f>>x[i]>>y[i];
    }
}
int cautare0(int l,int r,int k)
{
    while(l<=r)
    {
        mij=l+(r-l)/2;
        if(v[mij]==k)
        {
            if(v[mij+1]>k || mij==r)
            {
                return mij;
            }
            else
            {
                l=mij+1;
            }
        }
        else
        {
            if(v[mij]<k)
            {
                l=mij+1;
            }
            if(v[mij]>k)
            {
                r=mij-1;
            }
        }
    }
    return -1;
}
int cautare1(int l,int r,int k)
{
    while(l<=r)
    {
        mij=l+(r-l)/2;
        if(v[mij]<=k)
        {
            if(v[mij+1]>k || mij==r)
            {
                return mij;
            }
            else
            {
                l=mij+1;
            }
        }
        else
        {
            r=mij-1;
        }
    }
    return mij;
}
int cautare2(int l,int r,int k)
{
    while(l<=r)
    {
        mij=l+(r-l)/2;
        if(v[mij]>=k)
        {
            if(v[mij-1]<k || mij==l)
            {
                return mij;
            }
            else
            {
                r=mij-1;
            }
        }
        else
        {


                l=mij+1;


        }
    }
    return mij;
}
int main()
{
    citire();
    for(i=1;i<=m;i++)
    {
        if(x[i]==0)
        {
            g<<cautare0(1,n,y[i])<<"\n";
        }
        if(x[i]==1)
        {
            g<<cautare1(1,n,y[i])<<"\n";
        }
        if(x[i]==2)
        {
            g<<cautare2(1,n,y[i])<<"\n";
        }
    }
    return 0;
}