Cod sursa(job #3030387)

Utilizator DomnulMilandruMilandru Nicon-David DomnulMilandru Data 17 martie 2023 17:26:03
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb

#include <fstream>

using namespace std;
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
int a[100001];
int n,cerinta,x,lg;
int cautbin1(int x,int lg)
{
   int i;
   for(i=0;lg!=0;lg=lg>>1)
     if(i+lg<n && x>=a[i+lg])
       i=i+lg;
    if(a[i]==x)
      return i+1;
    else
      return -1;
}
int cautbin2(int x,int lg)
{
   int i;
   for(i=0;lg!=0;lg=lg>>1)
     if(i+lg<n && x>=a[i+lg])
       i=i+lg;
      return i+1;
}
int cautbin3(int x,int lg)
{
    int i;
    for(i=n-1;lg!=0;lg=lg>>1)
       if(i-lg>=0 && x<=a[i-lg])
        i=i-lg;
    return i+1;
}
int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
      cin>>a[i];
    int q;
    cin>>q;
    for(lg=1;lg<=n;lg=(lg<<1));
    for(int i=0;i<q;i++)
    {
        cin>>cerinta>>x;
        if(cerinta==0)
          cout<<cautbin1(x,lg)<<'\n';
        else
          if(cerinta==1)
            cout<<cautbin2(x,lg)<<'\n';
        else
         cout<<cautbin3(x,lg)<<'\n';
    }
    return 0;
}