Cod sursa(job #2695307)

Utilizator brainwashed20Alexandru Gherghe brainwashed20 Data 12 ianuarie 2021 14:06:53
Problema Cautare binara Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 2.85 kb
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

class CautBin {
    private int numOfElements;
    private int[] list;

    public CautBin(int numOfElements, int[] list) {
        this.numOfElements = numOfElements;
        this.list = list;
    }

    public int biggestIndexWithValue(int value) {
        int idx = -1;

        int lo = 0;
        int hi = numOfElements - 1;

        while (lo <= hi) {
            int mid = lo + ((hi - lo) / 2);
            if (list[mid] == value) {
                idx = mid;
                lo = mid + 1;
            } else if (list[mid] < value) {
                lo = mid + 1;
            } else {
                hi = mid - 1;
            }
        }

        return idx + 1;
    }

    public int biggestIndexWithValueLessOrEqual(int value) {
        int idx = -1;

        int lo = 0;
        int hi = numOfElements - 1;

        while (lo <= hi) {
            int mid = lo + ((hi - lo) / 2);
            if (list[mid] <= value) {
                idx = mid;
                lo = mid + 1;
            } else {
                hi = mid - 1;
            }
        }

        return idx + 1;
    }

    public int lowestIndexWithValueHighOrEqual(int value) {
        int idx = -1;

        int lo = 0;
        int hi = numOfElements - 1;

        while (lo <= hi) {
            int mid = lo + ((hi - lo) / 2);
            if (list[mid] >= value) {
                idx = mid;
                hi = mid - 1;
            } else {
                lo = mid + 1;
            }
        }

        return idx + 1;
    }
}

class Main {

    private final static String INPUT_FILE = "cautbin.in";
    private final static String OUTPUT_FILE = "cautbin.out";

    public static void main(String[] args) throws IOException {

        Scanner scanner = new Scanner(new File(INPUT_FILE));

        int numOfElements = scanner.nextInt();
        int[] list = new int[numOfElements];
        for (int idx = 0; idx < numOfElements; ++idx) {
            list[idx] = scanner.nextInt();
        }

        CautBin cautBin = new CautBin(numOfElements, list);

        FileWriter myWriter = new FileWriter(OUTPUT_FILE);

        int numOfQueries = scanner.nextInt();
        for (int query = 0; query < numOfQueries; ++query) {
            int queryType = scanner.nextInt();
            int value = scanner.nextInt();
            if (queryType == 0) {
                myWriter.write(cautBin.biggestIndexWithValue(value));
                myWriter.write("\n");
            } else if (queryType == 1) {
                myWriter.write(cautBin.biggestIndexWithValueLessOrEqual(value));
                myWriter.write("\n");
            } else if (queryType == 2) {
                myWriter.write(cautBin.lowestIndexWithValueHighOrEqual(value));
                myWriter.write("\n");
            }
        }

        myWriter.close();
    }
}