Cod sursa(job #1751417)

Utilizator Costel_DraghiciDraghici Constantin Costel_Draghici Data 1 septembrie 2016 13:33:08
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#define Nmax 100010
int v[Nmax];
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int bsearch0 (int p, int u, int x) {
    int m;

    while (p <= u) {
        m = (p + u)/2;
        if (v[m] <= x)
            p = m + 1;
        else
            u = m - 1;
    }
    m=(p + u)/2;

    if (v[m]>x) m --;
    if (v[m]==x)
        return m;
    return -1;
}

int bsearch1 (int p, int u, int x) {
    int m;

    while (p < u){
        m =(p + u)/2;
        if (v[m] <= x)
            p = m + 1;
        else
            u = m;
    }

    m = (p + u) / 2;
    if (v[m] > x)
       -- m;
    return m;
}

int bsearch2 (int p, int u, int x) {
    int m;

    while (p < u) {
        m = (p + u) / 2;
        if (v[m] < x)
            p = m + 1;
        else
            u = m;
    }

    m = (p + u) / 2;
    if (v[m] < x)
       ++ m;
    return m;
}

int main()
{
    int n,t,tip,val;
    f>>n;
    for(int i=1;i<=n;i++)
        f>>v[i];

    f>>t;
    while(t --)
    {
      f>>tip>>val;
      if(tip==0)
      g<<bsearch0(1, n, val)<<"\n";
      if(tip==1)
      g<<bsearch1(1, n, val)<<"\n";
      if(tip==2)
      g<<bsearch2(1, n, val)<<"\n";
    }
}