Cod sursa(job #3353418)

Utilizator Maries_MihaiMaries Mihai Maries_Mihai Data 7 mai 2026 10:51:08
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.77 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

#define nmax 100005

int bin[nmax];
int n, tasklist;

int task1(int x){
    int pos;

    int lefty = 0, righty = n - 1;

    while(lefty <= righty ){
        int mid = (lefty + righty) / 2;

        if(bin[mid] >= x){
            pos = mid;
        }

        if(bin[mid] <= x){
            lefty++;
        }
        else if(bin[mid] >= x){
            righty++;
        }
    }
    pos++;
    return pos;
}

int task2(int x){
    int pos = 0;

    int lefty = 0, righty = n - 1;

    while(lefty <= righty && bin[pos] <= x){
        int mid = (lefty + righty) / 2;

        if(bin[mid] == x){
            pos = mid;
        }

        if(bin[mid] <= x){
            lefty++;
        }
        else if(bin[mid] >= x){
            righty++;
        }
    }
    pos++;
    return pos;
}

int task3(int x){
    int pos;

    int lefty = 0, righty = n - 1;

    while(lefty <= righty ){
        int mid = (lefty + righty) / 2;

        if(bin[mid] == x){
            pos = mid;
        }

        if(bin[mid] <= x){
            lefty++;
        }
        else if(bin[mid] >= x){
            righty++;
        }

        if(bin[pos] >= x){
            pos++;
            return pos;
        }
    }
}

int main()
{
    fin >> n;
    for(int i = 0; i < n; i++){
        fin >> bin[i];
    }

    fin >> tasklist;

    while(tasklist--){
        int tasknum, x;
        fin >> tasknum >> x;

        if(tasknum == 0)
            fout << task1(x) << '\n';
        else if(tasknum == 1)
            fout << task2(x) << '\n';
        else if(tasknum == 2)
            fout << task3(x);
    }

    return 0;
}