Cod sursa(job #2722842)

Utilizator ddiana.gamesDiana Games ddiana.games Data 13 martie 2021 12:33:44
Problema Cautare binara Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 1.76 kb
import java.io.*;
//0 x - cea mai mare pozitie pe care se afla un element cu valoarea x sau -1 daca aceasta valoare nu se gaseste in sir
//1 x - cea mai mare pozitie pe care se afla un element cu valoarea mai mica sau egala cu x in sir. Se garanteaza ca cel mai mic numar al sirului este mai mic sau egal decat x
//2 x - cea mai mica pozitie pe care se afla un element cu valoarea mai mare sau egala cu x in sir. Se garanteaza ca cel mai mare numar din sir este mai mare sau egal decat x

public class Main {
    public static int solution(int type, int x, int[] arr, int n) {
        int pos, step;

        switch (type) {
            case 2:
                for (pos = -1, step = 1 << 8; step > 0; step >>= 1)
                    if (pos + step < n && arr[pos + step] < x)
                        pos += step;

                return pos + 2;
            default:
                for (pos = -1, step = 1 << 8; step > 0; step >>= 1)
                    if (pos + step < n && arr[pos + step] <= x)
                        pos += step;

                return pos + 1;
        }
    }

    public static void main(String[] args) throws FileNotFoundException, IOException {
        BufferedReader in = new BufferedReader(new FileReader("cautbin.in"));
        PrintStream out = new PrintStream("cautbin.out");

        int n = Integer.parseInt(in.readLine());
        int[] arr = new int[n];
        String[] s = in.readLine().split("\\s+");
        for (int i = 0; i < n; ++i)
            arr[i] = Integer.parseInt(s[i]);
        int m = Integer.parseInt(in.readLine());
        while (m-- > 0) {
            s = in.readLine().split("\\s+");
            out.printf("%d\n", solution(Integer.parseInt(s[0]), Integer.parseInt(s[1]), arr, n));
        }
        in.close();
        out.close();
    }
}