Pagini recente » Cod sursa (job #1371780) | Cod sursa (job #1575971) | Cod sursa (job #2752633) | Cod sursa (job #1318805) | Cod sursa (job #2194042)
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.Objects;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws FileNotFoundException {
Scanner scanner = new Scanner(new FileReader("cautbin.in"));
PrintWriter printWriter = new PrintWriter("cautbin.out");
int n = scanner.nextInt();
int arr[] = new int[n];
for (int i=0; i<n; i++) {
arr[i] = scanner.nextInt();
}
int m = scanner.nextInt();
for (int i=0; i<m; i++) {
int operation = scanner.nextInt();
int find = scanner.nextInt();
switch (operation) {
case 0:
printWriter.println(binarySearchFindLast(arr, find)+1);
break;
case 1:
printWriter.println(binarySearchFindLastLtEq(arr, find)+1);
break;
case 2:
printWriter.println(binarySearchFindFirstGtEq(arr, find)+1);
break;
}
}
scanner.close();
printWriter.close();
}
static int binarySearchFindLast(int arr[], int n) {
Objects.requireNonNull(arr);
if (arr.length == 0) {
throw new IllegalArgumentException("zero sized array provided");
}
int lastPositionFound = -1;
int lower = 0;
int upper = arr.length-1;
while (lower <= upper) {
int middle = lower+(upper-lower)/2;
if (arr[middle] >= n) {
lower = middle+1;
if (arr[middle] == n) {
lastPositionFound = middle;
}
} else {
upper = middle-1;
}
}
return lastPositionFound;
}
static int binarySearchFindLastLtEq(int arr[], int n) {
Objects.requireNonNull(arr);
if (arr.length == 0) {
throw new IllegalArgumentException("zero sized array provided");
}
int lastPositionFound = -1;
int lower = 0;
int upper = arr.length-1;
while (lower <= upper) {
int middle = lower+(upper-lower)/2;
if (arr[middle] <= n) {
lastPositionFound = middle;
lower = middle+1;
} else {
upper = middle-1;
}
}
return lastPositionFound;
}
static int binarySearchFindFirstGtEq(int arr[], int n) {
Objects.requireNonNull(arr);
if (arr.length == 0) {
throw new IllegalArgumentException("zero sized array provided");
}
int lastPositionFound = -1;
int lower = 0;
int upper = arr.length-1;
while (lower <= upper) {
int middle = lower+(upper-lower)/2;
if (arr[middle] >= n) {
lastPositionFound = middle;
upper = middle-1;
} else {
lower = middle+1;
}
}
return lastPositionFound;
}
}