Cod sursa(job #3217534)

Utilizator baragan30Baragan Andrei baragan30 Data 23 martie 2024 13:57:47
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");

int upperBound(int v[], int n, int x)
{
    int left=0;
    int right=n;
    while(left<right)
    {
        int md=(left + right)/2;
        if(v[md]<=x)
        {
            left=md+1;
        }
        else
        {
            right=md;
        }
    }
    return left;
}

int lowerBound(int v[], int n, int x)
{
    int left=0;
    int right=n;
    while(left<right)
    {
        int md=(left+right)/2;
        if(v[md]<x)
        {
            left=md+1;
        }
        else
        {
            right=md;
        }
    }
    return left;
}

int main()
{
    int n, v[100001];
    f>>n;
    for(int i=0; i<n; i++)
    {
        f>>v[i];
    }
    int q;
    f>>q;
    int k, x;
    for(int i=0; i<q; i++)
    {
       f>>k>>x;
       if(k==0)
        {
                int i = upperBound(v, n, x);

            if(i>0 && v[i-1]==x)
            g<<i-1<<" ";
            else
            g<<-1<<" ";
        }
        if(k==1)
        {
            int i=upperBound(v, n, x);
            g<<i-1<<" ";
        }
        if(k==2)
        {
            g<<lowerBound(v, n, x)<<" ";
        }
    }

    return 0;
}