Cod sursa(job #1021950)

Utilizator CatalinaRaduCatalina Elena Radu CatalinaRadu Data 4 noiembrie 2013 15:09:16
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.62 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream f ("cautbin.in");
ofstream g ("cautbin.out");
long n;
int x;
int v[100001];

long caut_bin1 (long n, int x, int *v)
{
    long left,mid,right;
    left=1;right=n;
    long rez=-1;
    while (left<=right)
    {
        mid=(left+right)/2;
        if(v[mid]==x)
        {
            rez=mid;
            left=mid+1;
        }

        else
            if(v[mid]<x)
            left=mid+1;
        else
           right=mid-1;
    }
        return rez;

}

long caut_bin2 (long n, int x, int *v)
{
    long left, mid,right;
    left=1; right=n;
    long rez=0;
    while(left<=right)
    {
        mid=(left+right)/2;
        if(v[mid]>x)
            right=mid-1;
        else
        {
          rez=mid;
          left=mid+1;
    }
    }
    return rez;
    }
long caut_bin3(long n, int x, int *v)
{
    long left, mid, right;
    left=1; right=n;
    long rez=0;
    while(left<=right)
    {
        mid=(left+right)/2;
        if (v[mid]>=x)
        {
           rez=mid;
           right=mid-1;
        }
        else
            if(v[mid]>x)
            left=mid+1;
    }
    return rez;
    }

int main()
{
    long i,m;
    int c;
    f>>n;
    for (i=1;i<=n;i++)
        f>>v[i];
    f>>m;
    for(i=1;i<=m;i++)
    {
        f>>c>>x;
        if (c==0)
            g<<caut_bin1(n,x,v)<<endl;
        else
            if(c==1)
            g<<caut_bin2(n,x,v)<<endl;
        else
            if(c==2)
            g<<caut_bin3(n,x,v)<<endl;
    }
    f.close();g.close();
    return 0;
}