Cod sursa(job #2298990)

Utilizator SergiuS3003Sergiu Stancu Nicolae SergiuS3003 Data 8 decembrie 2018 18:33:56
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.49 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int N,v[100001];
///cea mai mare pozitie pe care se afla un element cu valoarea x
///sau -1 daca aceasta valoare nu exista
int caut0(int x)
{
    int p = 1, u = N,poz=-1;

    while(p <= u)
    {   int mij = (p + u) / 2;
        if(x == v[mij])
            poz=mij;
        if(x >= v[mij])
            p = mij + 1;
        else
            u = mij - 1;
    }
    return poz;
}
/// cea mai mare pozitie
/// pe care se afla un element cu valoarea mai mica sau egala cu x in sir
int caut1(int x)
{
    int p=1,u=N,poz=-1;
    while(p<=u)
    {
        int m=(p+u)/2;
        if(x>=v[m])
        {
            poz=m;
            p=m+1;
        }
        else u=m-1;
    }
    return poz;
}
// cea mai mica pozitie pe care se afla
// un element cu valoarea mai mare sau egala cu x in sir
int caut2(int x)
{
    int p=1,u=N,poz=-1;
    while(p<=u)
    {
        int m=(p+u)/2;
        if(x<=v[m])
        {
            poz=m;
            u=m-1;
        }
        else p=m+1;
    }
    return poz;
}
int main()
{
   int M,t,x,i;
   f>>N;
   for(i=1;i<=N;i++)
    f>>v[i];
   f>>M;
   while(M--)
   {
       f>>t>>x;
       switch(t)
       {
       case 0:
          g<<caut0(x)<<'\n';
          break;
       case 1:
          g<<caut1(x)<<'\n';
          break;
       case 2:
          g<<caut2(x)<<'\n';
       }
   }
    return 0;
}