Cod sursa(job #1100161)

Utilizator Mitsa3Neamt Mihai Mitsa3 Data 6 februarie 2014 17:59:38
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
#define MAX 10005
int a[MAX],n;
void caut_bin(int x)
{
    int st = 1;
    int dr = n;
    int ind=-1;
    while(st<=dr) {
        int mid=(st+dr)/2;
        if(a[mid]==x)
            ind = mid,st = mid + 1;
        else if(a[mid]<x)
                st = mid + 1;
        else dr = mid - 1;
    }
    fout << ind << "\n";
}


void caut_bin1(int x)
{
    int st = 1;
    int dr = n;
    int rez;
    while(st<=dr) {
        int mid=(st+dr)/2;
        if(a[mid]<=x)
            rez = mid, st = mid + 1;
        else dr = mid - 1;
    }
    fout << rez << "\n";
}
void caut_bin2(int x)
{
    int st = 1;
    int dr = n;
    int rez;
    while(st<=dr) {
        int mid=(st+dr)/2;
        if(a[mid]>=x)
            rez = mid, dr = mid - 1;
        else st = mid + 1;
    }
    fout << rez << "\n";
}
int main()
{
    int m;
    fin >> n;
    for(int i = 1; i<=n; i++)
        fin >> a[i];
    fin >> m;
    for(int j = 1; j<=m; j++) {
        int opt, el;
        fin >> opt >> el;
        if(opt == 0)
            caut_bin(el);
        if(opt == 1)
            caut_bin1(el);
        if(opt == 2)
            caut_bin2(el);
    }
    return 0;
}