Pagini recente » Cod sursa (job #1693177) | Cod sursa (job #318204) | Cod sursa (job #2976122) | Cod sursa (job #2551219) | Cod sursa (job #957899)
Cod sursa(job #957899)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n, a[100000];
int cautbin0 (int st, int dr, int key) {
int middle;
while (st <= dr) {
middle = (st + dr) / 2;
if (a[middle] <= key)
st = middle + 1;
else
dr = middle - 1;
}
middle = (st + dr) / 2;
if (a[middle] > key) middle --;
if (a[middle] == key)
return middle;
return -1;
}
int cautbin1 (int st, int dr, int key) {
int middle, n = dr;
while (st < dr){
middle = (st + dr) / 2;
if (a[middle] <= key)
st = middle + 1;
else
dr = middle;
}
middle = (st + dr) / 2;
if (a[middle] > key)
-- middle;
return middle;
}
int cautbin2 (int st, int dr, int key) {
int middle;
while (st < dr) {
middle = (st + dr) / 2;
if (a[middle] < key)
st = middle + 1;
else
dr = middle;
}
middle = (st + dr) / 2;
if (a[middle] < key)
++ middle;
return middle;
}
int m;
int main()
{
f >> n;
for(int i = 1; i <= n; i++)
f >> a[i];
f >> m;
for(int i = 1; i <= m; i++)
{
int key;
f >> key;
int x;
f >> x;
switch(key)
{
case 0:
g << cautbin0(1, n, x) << endl;
break;
case 1:
g << cautbin1(1, n, x) << endl;
break;
case 2:
g << cautbin2(1, n, x) << endl;
break;
}
}
f.close();
g.close();
return 0;
}