Pagini recente » Cod sursa (job #2636220) | Cod sursa (job #2779387) | Cod sursa (job #2545284) | Cod sursa (job #791102) | Cod sursa (job #957895)
Cod sursa(job #957895)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n, a[100000];
int cautbin0(int x){
int st = 1;
int dr = n;
int middle;
while (st <= dr) {
middle = (st + dr) / 2;
if (a[middle] <= x)
st = middle + 1;
else
dr = middle - 1;
}
middle = (st + dr) / 2;
if (a[middle] > x) middle--;
if (a[middle] == x)
return middle;
return -1;
}
int cautbin1(int x){
int st = 1;
int dr = n;
int middle;
while (st <= dr) {
middle = (st + dr) / 2;
if (a[middle] <= x)
st = middle + 1;
else
dr = middle - 1;
}
middle = (st + dr) / 2;
if (a[middle + 1] == a[middle]) middle++;
return middle;
}
int cautbin2(int x){
int st = 1;
int dr = n;
int middle;
while (st <= dr) {
middle = (st + dr) / 2;
if (a[middle] <= x)
st = middle + 1;
else
dr = middle - 1;
}
middle = (st + dr) / 2;
while (a[middle - 1] == a[middle]) 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:
cout << cautbin0(x) << endl;
break;
case 1:
cout << cautbin1(x) << endl;
break;
case 2:
cout << cautbin2(x) << endl;
break;
}
}
f.close();
g.close();
return 0;
}