Cod sursa(job #1672918)

Utilizator adrian.raduRadu Adrian adrian.radu Data 3 aprilie 2016 11:55:32
Problema Cautare binara Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 3.14 kb
//package cautare_binara;

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    
    static int bin_search0(int []v, int n, int x) {
        int low, high, middle;
        low = 0;
        high = n-1;
        middle = (low + high) / 2;
        while (low <= high) {
            middle = (low + high) / 2;
            
            if (v[middle] <= x) {
                low = middle + 1;
            }
            if (v[middle] > x) {
                high = middle -1;
            }
        }
        
        if (v[middle] > x)
            middle--;
        if (v[middle] == x)
            return middle;
        return -1;
    }
    
    static int bin_search1(int []v, int n, int x) {
        int low, high, middle;
        low = 0;
        high = n - 1;
        
        
        while (low < high){
            middle = (low + high) /2;
            if (v[middle] <= x) {
                low = middle + 1;
            } else {
                high = middle;
            }
        }
        middle = (low + high) / 2;
        if (v[middle] > x)
            middle--;
        return middle;
    }
    static int bin_search2(int []v, int n, int x) {
        int low, high, middle;
        low = 0;
        high = n - 1;
        while (low < high) {
            middle = (low + high) /2;
            if (v[middle] < x) {
                low = middle + 1;
            } else {
                high = middle;
            }
        }
        middle = (low + high) /2;
        if (v[middle] < x)
            middle++;
        return middle;
    }
    public static void main(String[] args) throws FileNotFoundException, IOException {
        BufferedReader br = new BufferedReader(new FileReader("cautbin.in"));
        BufferedWriter bw = new BufferedWriter(new FileWriter("cautbin.out"));
        int [] v = new int[100000];
        int i, j, n, m, q, x, idx = -1;
        String line;
        
        //read n - size of vector
        n = Integer.parseInt(br.readLine());
        i = 0;
        //read the n elements of v
        line = br.readLine();
        StringTokenizer st = new StringTokenizer(line, " ");
        while (st.hasMoreTokens()){
            v[i++] = Integer.parseInt(st.nextToken());
        }
        
        //read m
        m = Integer.parseInt(br.readLine());
        //read the m test cases
        for(i = 0; i < m; i++) {
            line = br.readLine();
            st = new StringTokenizer(line, " ");
            //read the question number
            q = Integer.parseInt(st.nextToken());
            //read the element
            x = Integer.parseInt(st.nextToken());
            switch (q) {
                case 0:
                    idx = bin_search0(v, n, x);
                    break;
                case 1:
                    idx = bin_search1(v, n, x);
                    break;
                case 2:
                    idx = bin_search2(v, n, x);
                    break;
                default:
                    break;
            }
            bw.write(idx + 1 +"\n");
        }
        br.close();
        bw.close();
    }
}