Pagini recente » Cod sursa (job #2836162) | Cod sursa (job #850751) | Cod sursa (job #2862121) | Cod sursa (job #524288) | Cod sursa (job #2953967)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
const int MAX_LENGTH = 100000;
void questionType0(int numbersLength, int numbers[MAX_LENGTH + 1], int xValue) {
numbers[numbersLength + 1] = numbers[numbersLength];
int left = 1, right = numbersLength + 1;
while (left < right) {
int middle = (left + right) / 2;
if (numbers[middle] < xValue + 1) {
left = middle + 1;
} else {
right = middle;
}
}
if (numbers[left - 1] == xValue) {
fout << left - 1;
} else {
fout << -1;
}
}
void questionType1(int numbersLength, int numbers[MAX_LENGTH + 1], int xValue) {
numbers[numbersLength + 1] = numbers[numbersLength];
int left = 1, right = numbersLength + 1;
while (left < right) {
int middle = (left + right) / 2;
if (numbers[middle] < xValue + 1) {
left = middle + 1;
} else {
right = middle;
}
}
fout << left - 1;
}
void questionType2(int numbersLength, int numbers[MAX_LENGTH + 1], int xValue) {
int left = 1, right = numbersLength;
while (left < right) {
int middle = (left + right) / 2;
if (numbers[middle] < xValue) {
left = middle + 1;
} else {
right = middle;
}
}
fout << left;
}
int main() {
int numbersLength;
fin >> numbersLength;
int numbers[MAX_LENGTH + 1 + 1]; // first 1 helps us to find maximum position of a number and second 1 is because we are starting from position = 1
for (int index = 1; index <= numbersLength; ++index) {
fin >> numbers[index];
}
int numberOfQuestions;
fin >> numberOfQuestions;
for (int question = 1; question <= numberOfQuestions; ++question) {
int questionType, xValue;
fin >> questionType >> xValue;
if (questionType == 0) {
questionType0(numbersLength, numbers, xValue);
} else if (questionType == 1) {
questionType1(numbersLength, numbers, xValue);
} else {
questionType2(numbersLength, numbers, xValue);
}
fout << '\n';
}
return 0;
}