Cod sursa(job #2109444)

Utilizator chindeacosminChindea Cosmin-Mihai chindeacosmin Data 19 ianuarie 2018 19:06:50
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.06 kb
///Se da un sir de numere ordonat crescator cu N elemente, si se cere sa se raspunda la M intrebari de tipul:
///0 x - cea mai mare pozitie pe care se afla un element cu valoarea x sau -1 daca aceasta valoare nu se gaseste in sir
///1 x - cea mai mare pozitie pe care se afla un element cu valoarea mai mica sau egala cu x in sir. Se garanteaza ca cel mai mic numar al sirului este mai mic sau egal decat x
///2 x - cea mai mica pozitie pe care se afla un element cu valoarea mai mare sau egala cu x in sir. Se garanteaza ca cel mai mare numar din sir este mai mare sau egal decat x
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int main()
{
    int n;
    f>>n;
    int a[n], m, ls=-1, li=-1, e ,v, j=-1,k=0;

    for(int i=0; i<n; i++)
    {
        f>>a[i];
    }
    f>>m;
    int b[m];
    for(int i=0; i<m ;i++)
    {
        ls=n;
        li=0;
        f>>e;
        f>>v;
        if(e==0)
        {
           b[k++];
           ls=n;
        li=0;
          while(li<ls)
          {
              j=(li+ls)/2;
              if(a[j]==v)
                b[k]=j;
              else
                if(v>=a[j])
                  li+=1;
                  else
                    ls-=1;
          }
        }
        if(e==1)
        {
            b[k++];
             ls=n;
        li=0;
            while(li<ls)
          {
              j=(li+ls)/2;
              if(a[j]==v)
                b[k]=j;
              else
                if(v<=a[j])
                  ls-=1;
                  else
                    li+=1;
          }
        }
        if(e==2)
        {
            b[k++];
             ls=n;
        li=0;
          while(li<ls)
          {
              j=(li+ls)/2;
              if(a[j]==v)
                b[k]=v;
              else
                if(v>=a[j])
                  li+=1;
                  else
                    ls-=1;
          }
        }
    }
    for(int i=0; i<k; i++)
        g<<b[k]<<endl;
    return 0;
}