Pagini recente » Cod sursa (job #33280) | Cod sursa (job #1504878) | Cod sursa (job #2539261)
#include <iostream>
#include <fstream>
using namespace std;
int N;
int a[100001];
int M;
int CautareBinare1(int x){
int lb, ub, mid;
int sol = -1;
lb = 1;
ub = N;
while(lb <= ub){
mid = lb + (ub - lb) / 2;
if(a[mid] == x){
sol = mid;
while(sol == a[mid + 1]){
sol = mid + 1;
mid++;
}
break;
}
if(a[mid] > x){
ub = mid - 1;
}
if(a[mid] < x){
lb = mid + 1;
}
}
return sol;
}
int cautareBinara2(int x){
int lb, ub, mid;
lb = 1;
ub = N;
int sol;
while(lb <= ub){
mid = lb + (ub - lb) / 2;
if(a[mid] == x){
sol = mid;
while(sol == a[mid + 1]){
sol = mid + 1;
mid++;
}
break;
}
if(a[mid] > x){
ub = mid - 1;
sol = mid - 1;
}
if(a[mid] < x){
lb = mid + 1;
}
}
return sol;
}
int cautareBinara3(int x){
int lb, ub, mid, sol;
lb = 1;
ub = N;
while(lb <= ub){
mid = lb + (ub - lb) / 2;
if(a[mid] == x){
sol = mid;
while(a[mid - 1] == x){
sol = mid - 1;
mid--;
}
break;
}
if(a[mid] > x){
ub = mid - 1;
}
if(a[mid] < x){
lb = mid + 1;
sol = mid + 1;
}
}
return sol;
}
int main()
{
ifstream f1("cautbin.in");
ofstream f2("cautbin.out");
f1 >> N;
int i;
for(i = 1; i <= N; i++){
f1 >> a[i];
}
f1 >> M;
int optiune;
int x;
for(i = 1; i <= M; i ++){
f1 >> optiune >> x;
if(optiune == 0){
f2 << CautareBinare1(x) << endl;
}
if(optiune == 1){
f2 << cautareBinara2(x) << endl;
}
if(optiune == 2){
f2 << cautareBinara3(x) << endl;
}
}
f1.close();
f2.close();
return 0;
}