Pagini recente » Monitorul de evaluare | Cod sursa (job #2135943) | Cod sursa (job #2051519) | Cod sursa (job #1720564) | Cod sursa (job #703208)
Cod sursa(job #703208)
#include<fstream>
#include<iostream>
using namespace std;
ifstream in ("cautbin.in");
ofstream out ("cautbin.out");
int v[100001], N;
void citeste(int N) {
for (int i=1; i<=N; i++)
in >> v[i];
}
int caut0(int val)
{
int i,pas=1<<16;
for(i=0 ; pas!=0 ; pas/=2)
if(i+pas<=N && v[i+pas]<=val)
i+=pas;
if(v[i]==val) return i;
return -1;
}
int caut1(int val) {
int i,pas=1<<16;
for(i=0 ; pas!=0 ; pas/=2)
if(i+pas<=N && v[i+pas]<=val)
i+=pas;
return i;
}
int caut2(int val) {
int i,pas=1<<16;
for(i=0 ; pas!=0 ; pas/=2)
if(i+pas<=N && v[i+pas]<val)
i+=pas;
return 1+i;
}
int main() {
int M, x, y;
in >> N;
citeste (N);
in >> M;
for (int i=1; i<=M; i++) {
in >> y >> x;
if (y==0) out << caut0(x) << "\n";
if (y==1) out << caut1(x) << "\n";
if (y==2) out << caut2(x) << "\n";
}
return 0;
}