Pagini recente » Cod sursa (job #1589299) | Cod sursa (job #2718409) | Cod sursa (job #628477) | Cod sursa (job #2413627) | Cod sursa (job #1679097)
#include <iostream>
#include <fstream>
using namespace std;
int v[100];
int cautbin(int low, int up, int op, int val) {
//cout << endl << low << " " << up;
if ( low > up ) {
return -1;
}
int mid = (low + up) / 2;
int pos;
switch (op) {
case 0:
if ( v[mid] == val ) {
for ( pos = mid; v[pos] == val && pos <= up; ++pos );
return pos;
} else {
break;
}
case 1: {
if ( v[mid] <= val ) {
for ( pos = mid; v[pos] <= val && pos <= up; ++pos ) ;
return pos;
} else {
break;
}
}
case 2: {
if ( v[mid] >= val ) {
pos = mid;
while ( v[--pos] >= mid );
return pos + 2;
} else {
break;
}
}
}
if ( val < v[mid] ) {
return cautbin(low, mid-1, op, val);
} else {
return cautbin(mid + 1, up, op, val);
}
}
int main()
{
int n, m, op, val;
ifstream in;
ofstream out;
in.open("cautbin.in");
out.open("cautbin.out");
in >> n;
for ( int i = 0; i < n; ++i ) {
in >> v[i];
}
in >> m;
for (int i = 0; i < m; ++i ) {
in >> op >> val;
out << cautbin(0, n-1, op, val) << "\n";
}
in.close();
out.close();
return 0;
}