Cod sursa(job #2953967)

Utilizator KRISTY06Mateiu Ianis Cristian Vasile KRISTY06 Data 12 decembrie 2022 19:39:48
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.18 kb
#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;
}