Cod sursa(job #1947502)

Utilizator RigonsRadu Molnar Rigons Data 31 martie 2017 00:02:10
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,v[100001];
int caut(int st,int dr,int y)
{
 int mij;
 while(st<=dr)
 {
     mij=(st+dr)/2;
     if(v[mij]<=y) st=mij+1;
     else dr=mij+1;
     mij=(st+dr)/2;
}
     while(v[mij]>y) mij--;
     if(v[mij]==y)  return mij;
     return -1;
}
int cautmin(int st,int dr,int y)
{
    int mij;
    while(st<dr)
    {
        mij=(st+dr)/2;
        if(v[mij]<=y) st=mij+1;
        else dr=mij;

    }
    mij=(st+dr)/2;
    if (v[mij] > y)
       -- mij;
    return mij;
}
int cautmax(int st,int dr,int y)
{
    int mij;
    while(st<dr)
    {
        mij=(st+dr)/2;
        if(v[mij]>y) st=mij+1;
        else dr=mij+1;
    }
    mij=(st+dr)/2;
    if (v[mij] < y)
       ++ mij;
    return mij;
}
int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i];
    int o;
    fin>>o;
    for(int i=1;i<=o;i++)
    {
        int x,y;
        fin>>x>>y;
        if(x==0)
            fout<<caut(1,n,y)<<'\n';
        if(x==1)
            fout<<cautmax(1,n,y)<<'\n';
        if(x==2)
            fout<<cautmin(1,n,y)<<'\n';
    }
    return 0;
}