Cod sursa(job #472750)

Utilizator andra23Laura Draghici andra23 Data 26 iulie 2010 15:39:13
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include<iostream>
#include<fstream>

using namespace std;

int a[100010];

int bsearch0(int p, int u, int x){
    int m, sol = 0;
    
    while (p <= u){
        m = (p+u)/2;
        if (a[m] <= x){
            sol = m;
            p = m+1;
        }
        else 
            u = m-1;
    }
    
    if (sol == 0 || a[sol] != x)
        return -1;
    return sol;   
}

int bsearch1(int p, int u, int x){
    int m, sol = 0;
    
    while (p <= u){
        m = (p + u)/2;
        if (a[m] <= x){
            sol = m;
            p = m+1;
        }
        else 
            u = m-1;
    }
    
    return sol;   
}

int bsearch2(int p, int u, int x){
    int m, sol = u+1;
    
    while (p <= u){
        m = (p + u)/2;
        if (x <= a[m]){
            sol = m;
            u = m-1;
        }
        else 
            p = m+1;
    }
    return sol;   
}


int main(){
    ifstream f("cautbin.in");
    ofstream g("cautbin.out");
    int n, x;
    f>>n;
    int  i, t, p;
    for (i = 1; i <= n; i++)
        f>>a[i];
    
    f>>p;
    for (i = 1; i <= p; i++){
        f>>t>>x;
        
        if (t == 0)
            g<<bsearch0(1, n, x)<<'\n';
        else 
            if (t == 1)
                g<<bsearch1(1, n, x)<<'\n';
            else 
                g<<bsearch2(1, n, x)<<'\n';
    }
    
    return 0;
}