Cod sursa(job #1428659)

Utilizator PletoPletosu Cosmin-Andrei Pleto Data 4 mai 2015 21:22:53
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 3.01 kb
///Cred intru Unul Dumnezeu, Tatal Atot stiitorul,
///Facatorul cerului si al pamantului, vazutelor tuturor si nevazutelor.
///Si intru Unul Domn Isus Hristos, Fiul lui Dumnezeu,
///Unul-Nascut, Carele din Tatal S-a nascut mai inainte de toti vecii.
///Lumina din Lumina,
///Dumnezeu adevarat din Dumnezeu adevarat, nascut, iara nu facut;
///Cel de o fiinta cu Tatal, prin Carele toate s-au facut;
///Carele pentru noi oamenii si pentru a noastra mantuire
///S-a pogorat din ceruri si S-a intrupat de la Duhul Sfant si din Maria Fecioara,
///Si S-a facut om;
///Si S-a rastignit pentru noi in zilele lui Pontiu Pilat si a patimit si S-a ingropat;
///Si a inviat a treia zi, dupa Scripturi;
///Si S-a inaltat la ceruri si sade de-a dreapta Tatalui;
///Si iarasi va sa vina cu slava, sa judece viii si mortii,
///A caruia imparatie nu va avea sfarsit.
///Si intru Duhul Sfant, Domnul de viata Facatorul,
///Carele de la Tatal purcede, Cela ce impreuna cu Tatal si cu Fiul este inchinat si slavit,
///Carele a grait prin prooroci.
///Intru Una, Sfanta, Soborniceasca si Apostoleasca Biserica;
///Marturisesc Un Botez, spre iertarea pacatelor;
///Astept invierea mortilor;
///Si viata veacului ce va sa vie.
///Amin!

#include<fstream>
#define MAXIM 100010
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int V[MAXIM];
int main ()
{
    int N,M,type,x,st,dr;
    in>>N;
    for(int i=1;i<=N;i++) in>>V[i];
    in>>M;
    for(int i=1;i<=M;i++)
    {
        in>>type>>x;
        switch(type)
        {
            case 0:
            ///se cauta cea mai mare pozitie pe care se afla un element cu valoarea x si se afiseaza
            ///in cazul in care nu se gaseste elementul x in vector se va afisa "-1"
            {
                int m;
                st=1; dr=N;
                while(st<=dr)
                {
                    m=(st+dr)/2;
                    if(V[m]<=x) st=m+1; else dr=m-1;
                }
                if(V[dr]==x) out<<dr<<"\n"; else out<<"-1"<<"\n";
                break;
            }
            case 1:
            ///se cauta cea mai mare pozitie pe care se afla un element cu valoarea mai mica sau egala
            ///cu x in sir si se afiseaza
            {
                int m;
                st=1; dr=N;
                while(st<=dr)
                {
                    m=(st+dr)/2;
                    if(V[m]<=x) st=m+1; else dr=m-1;
                }
                out<<dr<<"\n";
                break;
            }
            case 2:
            ///se cauta cea mai mica pozitie pe care se afla un element cu valoarea mai mare sau egala
            ///cu x in sir si se afiseaza
            {
                int m;
                st=1; dr=N;
                while(st<=dr)
                {
                    m=(st+dr)/2;
                    if(V[m]<x) st=m+1; else dr=m-1;
                }
                out<<st<<"\n";
                break;
            }
        }
    }
    out.close();return 0;
}