Cod sursa(job #3370120)

Utilizator Dobre_RaduDobre Radu Dobre_Radu Data 24 octombrie 2026 10:29:56
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <bits/stdc++.h>
using namespace std;

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

int x[100001];
int n;

int srch(int y){
    int l = 0,r = n-1,res = -2;
    
    while(l <= r){
        int mid = l + (r - l) / 2;
        
        if(x[mid] <= y){
            l = mid+1;
            res = mid;
        } else {
            r = mid-1;
        }
    }
    
    if(res == -2 || x[res] != y)return -2;
    return res;
}

int srch1(int y){
    int l = 0,r = n-1,res = n-1;
    
    while(l <= r){
        int mid = l + (r - l) / 2;
        
        
        if(x[mid] <= y){
            l = mid+1;
            res = mid;
        } else {
            r = mid-1;
        }
    }
    
    return res;
}

int srch2(int y){
    int l = 0,r = n-1,res = 0;
    
    while(l <= r){
        int mid = l + (r - l) / 2;
        
        if(x[mid] < y){
            l = mid+1;
        } else {
            r = mid-1;
            res = mid;
        }
    }
    
    return res;
}

int res(int c, int nr){
    if(c == 0)return srch(nr);
    if(c == 1)return srch1(nr);
    return srch2(nr);
}

int main()
{
    fin >> n;
    
    for(int i = 0; i < n;i++){
        fin >> x[i];
    }
    
    int q,t,y;
    fin >> q;
    
    for(int i = 0;i < q;i++){
        fin >> t >> y;
        
        fout << res(t,y)+1 << endl;
    }
    

    return 0;
}