Cod sursa(job #2635729)

Utilizator mariaiancIanc Maria mariaianc Data 15 iulie 2020 13:58:19
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.46 kb
#include <iostream>
#include <fstream>
using namespace std;
int poz_max(int n, int v[], int x)
{
    int st, dr, mij;
    st=1;
    dr=n;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(v[mij]>x)dr=mij-1;
        else st=mij+1;
    }
    mij=(st+dr)/2;
    if(v[mij]>x) mij--;
    if(v[mij]==x) return mij;
    else return -1;
}
int poz_max2(int n, int v[], int x)
{
    int st,dr,mij;
    st=1;
    dr=n;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(v[mij]>x)dr=mij-1;
        else st=mij+1;
    }
    mij=(st+dr)/2;
    if(v[mij]>x)mij=mij-1;
    if(v[mij]<=x) return mij;
    else return -1;
}
int poz_min(int n, int v[], int x)
{
    int st,dr,mij;
    st=1;
    dr=n;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(v[mij]>=x)dr=mij-1;
        else st=mij+1;
    }
    mij=(st+dr)/2;
    if(v[mij]<x)mij=mij+1;
    if(v[mij]>=x)return mij;
    else return -1;
}
int n,v[100001],x,i,m,cont=0;
int main()
{

    ifstream f("cautbin.in");
    ofstream g("cautbin.out");
    f>>n;
    for(i=1; i<=n; i++)
    {
        f>>v[i];
    }
    f>>m;
    while(cont<m)
    {  f>>i;
        if(i==0)
        {
            f>>x;
            g<<poz_max(n,v,x)<<'\n';
        }
        if(i==1)
        {
            f>>x;
            g<<poz_max2(n,v,x)<<'\n';
        }
        if(i==2)
        {
            f>>x;
            g<<poz_min(n,v,x)<<'\n';
        }
        cont++;
    }

}