Pagini recente » Cod sursa (job #1080609) | Cod sursa (job #2359171) | Cod sursa (job #1987021) | Cod sursa (job #2704386) | Cod sursa (job #1164273)
#include <fstream>
using namespace std;
const int MAX = 100050;
int N, M;
int V[MAX];
inline int LowerBound(int X) {
int Ans = 0;
for(int step = (1 << 17); step; step >>= 1) {
if(Ans + step <= N && V[Ans + step] <= X)
Ans += step;
} return Ans;
}
inline int UpperBound(int X) {
int Ans = 0;
for(int step = (1 << 17); step; step >>= 1) {
if(Ans + step <= N && V[Ans + step] < X)
Ans += step;
} return Ans + 1;
}
int main() {
ifstream in("cautbin.in"); ofstream out("cautbin.out");
in >> N;
for(int i = 1; i <= N; i++)
in >> V[i];
in >> M;
for(int i = 1, op, A, poz; i <= M; i++) {
in >> op >> A;
switch(op) {
case 0:
poz = LowerBound(A);
if(V[poz] != A)
out << "-1\n";
else
out << poz << "\n";
break;
case 1:
out << LowerBound(A) << "\n";
break;
case 2:
out << UpperBound(A) << "\n";
break;
}
}
}