Cod sursa(job #1832261)

Utilizator Jucan_RaresJucan Rares Jucan_Rares Data 19 decembrie 2016 18:09:49
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.71 kb
#include <iostream>
/*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 */
#include <fstream>
using namespace std;
ifstream f("nush.in");
ofstream g("nush.out");

int main()
{
   int n, m, v[100], i, c, maxx, p, st, dr,x,mi;
   f>>n;
   for(i=1; i<=n; i++)
        f>>v[i];
   f>>m;
   for(i=1; i<=m; i++)
   {
       f>>p>>x;
       if(p==0) {
        maxx=0;
       st=1;
       dr=n;
       while(st<=dr)
       {
           mi=(st+dr)/2;
           if(v[mi]==x) {maxx=mi;
                        st=mi+1; }

           else if(v[mi]>x) dr=mi-1;
               else st=mi+1;
       }
       if(maxx!=0) g<<maxx<<endl;
       else g<<-1<<endl;
       }

       else if(p==1)
       {
           maxx=0;
       st=1;
       dr=n;
       while(st<=dr)
       {
           mi=(st+dr)/2;
           if(v[mi]<=x) {maxx=mi;
                        st=mi+1; }

           else dr=mi-1;

       }
       if(maxx!=0) g<<maxx<<endl;
       else g<<-1<<endl;
       }
       else {
       maxx=0;
       st=1;
       dr=n;
       while(st<=dr)
       {
           mi=(st+dr)/2;
           if(v[mi]>=x) {maxx=mi;
                        dr=mi-1; }

           else st=mi+1;

       }
       if(maxx!=0) g<<maxx<<endl;
       else g<<-1<<endl;
       }
}




    return 0;
}