Pagini recente » Cod sursa (job #2975340) | Cod sursa (job #1347657) | Cod sursa (job #904998) | Cod sursa (job #2567894) | Cod sursa (job #2695307)
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();
}
}