Cod sursa(job #1758389)

Utilizator PondorastiAlex Turcanu Pondorasti Data 17 septembrie 2016 10:12:17
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <iostream>
#include <fstream>
using namespace std;
int v[100005];
int Binary_Search_Q0(int p, int u, int x);
int Binary_Search_Q1(int p, int u, int x);
int Binary_Search_Q2(int p, int u, int x);
int main()
{
    ifstream in("cautbin.in");
    ofstream out("cautbin.out");
    int n,m,q,x;
    in>>n;
    for(int i=1; i<=n; i++)
        in>>v[i];
    in>>m;
    for(int i=1; i<=m; i++)
    {
        in>>q>>x;
        if(q==0)
            out<<Binary_Search_Q0(1,n,x)<<endl;
        if(q==1)
            out<<Binary_Search_Q1(1,n,x)<<endl;
        if(q==2)
            out<<Binary_Search_Q2(1,n,x)<<endl;
    }
    in.close();
    out.close();
    return 0;
}
int Binary_Search_Q0(int p, int u, int x)
{
    int m;
    while(p<u)
    {
        m=p+(u-p)/2;
        if(v[m]<=x)
            p=m+1;
        else
            u=m-1;
    }
    m=p+(u-p)/2;
    if(v[m]>x)
        m--;
    if(v[m]==x)
        return m;
    else
        return -1;
}
int Binary_Search_Q1(int p, int u, int x)
{
    int m;
    while(p<u)
    {
        m=p+(u-p)/2;
        if(v[m]<=x)
            p=m+1;
        else
            u=m-1;
    }
    m=p+(u-p)/2;
    if(v[m]>x)
        m--;
    return m;
}
int Binary_Search_Q2(int p, int u, int x)
{
    int m;
    while(p<u)
    {
        m=p+(u-p)/2;
        if(v[m]<x)
            p=m+1;
        else
            u=m;
    }
    m=p+(u-p)/2;
    if(v[m]<x)
        m++;
    return m;
}