Cod sursa(job #3170542)

Utilizator Le0nard27jsldfjlkjdsflkasdfkjhl Le0nard27 Data 17 noiembrie 2023 19:08:19
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n,m,a[100010],op,x;

int cautbin0(int x)
{
  int st = 1, dr = n, mij;
   while(st<=dr)
   {
     mij=(st+dr)/2;

     if(a[mij]==x)break;

     if(x>a[mij])
      st=mij+1;
      else
      dr=mij-1;
   }

   if(a[mij]!=x)return -1;

   while(a[mij]==a[mij+1])
   {
    mij++;
   }

   return mij;
}

int cautbin1(int x)
{
  
  int st = 1, dr = n, mij;
   while(st<=dr)
   {
     mij=(st+dr)/2;

     if(x>a[mij])
      st=mij+1;
      else
      dr=mij-1;
   }

    while(a[mij]>=a[mij+1])
   {
     mij++;
   }

   return mij;
}

int cautbin2(int x)
{
   int st = 1, dr = n, mij;
   while(st<=dr)
   {
     mij=(st+dr)/2;

     if(x>a[mij])
      st=mij+1;
      else
      dr=mij-1;
   }

   while(a[mij]<=a[mij-1])
   {
     mij--;
   }

   return mij;
}


int main()
{
    fin>>n;
    for(int i=1; i<=n; i++)
     fin>>a[i];

    fin>>m;

    for(int i=1; i<=m; i++)
    {
       fin>>op;
       fin>>x;

       if(op==0)
       {
         fout<<cautbin0(x)<<endl;
       }
       else
       if(op==1)
       {
         fout<<cautbin1(x)<<endl;
       }
       else
       if(op==2)
       {
         fout<<cautbin2(x)<<endl;
       }
    }
}