Cod sursa(job #2785338)

Utilizator RZV_BestBirsan Razvan RZV_Best Data 18 octombrie 2021 16:28:48
Problema Cautare binara Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n,m,a[100000],x;
struct struc
{
    int x,y;
};struc b[100000];
void citire(int a[100000],int &n,int &m,struc b[100000])
{
    int i;
    f>>n;
    for(i=1;i<=n;i++)
        f>>a[i];
    f>>m;
    for(i=1;i<=m;i++)
        f>>b[i].x>>b[i].y;
}
int caz1(int a[100000],int n,int h)
{
    int dr=n,st=1,poz=-1;
    while(st<=dr)
    {
        m=(dr+st)/2;
        if(a[m]>h)dr=m-1;
        else {if(a[m]==h)poz=m; st=m+1; }
        if(a[st]>h)break;
    }
    return poz;
}
int caz2(int a[100000],int n,int h)
{
    int dr=n,st=1,poz=-1;
    while(st<=dr)
    {
        m=(dr+st)/2;
        if(a[m]>h)dr=m-1;
        else {if(a[m]<=h)poz=m;  st=m+1; }
    }
    return poz;
}
int caz3(int a[100000],int n,int h)
{
    int dr=n,st=1,poz=-1;
    while(st<=dr)
    {
        m=(dr+st)/2;
        if(a[m]>=h){if(a[m]>=h)poz=m;dr=m-1;}
        else {st=m+1; }
    }
    return poz;
}
void afisare(int a[100000],struc b[100000],int n,int m)
{
    int i=0;
    for(i=1;i<=m;i++)
    {
        if(b[i].x==0)g<<caz1(a,n,b[i].y);
        else if(b[i].x==1)g<<caz2(a,n,b[i].y);
        else g<<caz3(a,n,b[i].y);
        g<<endl;
    }
}
int main()
{
    citire(a,n,m,b);
    afisare(a,b,n,m);
    return 0;
}