Cod sursa(job #1733407)

Utilizator Kln1000Ciobanu Bogdan Kln1000 Data 24 iulie 2016 17:14:13
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
#include <fstream>

using namespace std;

long n,m,v[100002];

ifstream f ("cautbin.in");
ofstream t ("cautbin.out");

int caut_bin_up(int x)
{
    int st=1,dr=n;
    while(st<=dr)
    {
        int mid=(st+dr)/2;
        if(x>=v[mid]) st=mid+1;
        else dr=mid-1;
    }
    return dr+1;
}

int caut_bin_low(int x)
{
    int st=1,dr=n;
    while(st<=dr)
    {
        int mid=(st+dr)/2;
        if(x<=v[mid]) dr=mid-1;
        else st=mid+1;
    }
    return st+1;
}

int main()
{
    long q,x,poz;
    f>>n;
    for (long i=0; i<n; ++i)
        f>>v[i];
    f>>m;
    for (long i=0; i<m; ++i)
    {
        f>>q>>x;
        if (q==0){
            poz=caut_bin_up(x);
        if (v[poz]==x) t<<poz<<'\n';
        else t<<"-1"<<'\n';}
        else if (q==1) t<<caut_bin_up(x)<<'\n';
        else if (q==2) t<<caut_bin_low(x)<<'\n';
    }
    return 0;
}