Cod sursa(job #2635696)

Utilizator mariaiancIanc Maria mariaianc Data 15 iulie 2020 13:06:57
Problema Cautare binara Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.45 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=dr-1;
        else st=st+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=dr-1;
        else st=st+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=dr-1;
        else st=st+1;
    }
    mij=(st+dr)/2;
    if(v[mij]<x)mij=mij+1;
    if(v[mij]>=x)return mij;
    else return -1;
}
int main()
{
    int n,v[200],x,i,m,cont=0;;
    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)<<endl;
        }
        if(i==1)
        {
            f>>x;
            g<<poz_max2(n,v,x)<<endl;
        }
        if(i==2)
        {
            f>>x;
            g<<poz_min(n,v,x)<<endl;
        }
        cont++;
    }

}