Pagini recente » Cod sursa (job #1882568) | Cod sursa (job #1682667) | Cod sursa (job #2597751) | Cod sursa (job #2591314) | Cod sursa (job #1428814)
#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;
///st reprezinta capatul cel mai din stanga, si dr reprezinta capatul cel mai din dreapta
while(st<=dr)
///continua sa caute cat timp [st,dr] nu este vid
{
m=(st+dr)/2;
///m este pozitia elementului din mijlocul sirului [st,dr]
if(V[m]<=x) st=m+1; ///in cazul in care V[m] este mai mic decat numarul cautat atunci
///cautarea se restrange in partea dreapta a sirului
///daca V[m] == x atunci continuam sa marim st pentru a gasi pozitia
///celui mai din dreapta. cand V[m]>dr inseamna ca V[m] este primul numar
///dupa secventa de numere egale cu x
else dr=m-1;
///in cazul in care V[m] este mai mare decat numarul cautat atunci
///cautarea se restrange in partea stanga a sirului
}
if(V[dr]==x) out<<dr<<"\n";
///daca s-a gasit elementul se afiseaza pozitia cea mai din dreapta
else out<<"-1"<<"\n";
///altfel se afiseaza mesajul ca nu exista, si anume "-1"
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;
///daca V[m]>=x atunci cautarea se restrange in partea stanga
}
out<<st<<"\n";
///cand st>dr atunci in st o sa fie prima pozitie a elementului cautat in sir
break;
}
}
}
out.close();return 0;
}