Pagini recente » Cod sursa (job #1581814) | Cod sursa (job #94890) | Cod sursa (job #77031) | Cod sursa (job #1574477) | Cod sursa (job #1470743)
#include<fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int N,M,A[100002],x;
int caut0(int val){
int i,j;
for(i = 1;i<N;i<<=1);
i >>= 1;
for(j = 0;i;i >>=1){
if(i+j < N && A[i+j] <= val)
j+=i;
}
if(A[j] == val) return j+1;
return -1;
}
int caut1(int val){
int i,j;
for(i = 1;i<N;i<<=1);
i >>= 1;
for(j = 0;i;i >>=1){
if(i+j < N && A[i+j] <= val)
j+=i;
}
if(A[j] <= val) return j+1;
}
int caut2(int val){
int i,j;
for(i = 1;i<N;i<<=1);
i >>= 1;
for(j = i;i;i >>=1){
if(j-i >= 0 && A[j-i] >= val)
j-=i;
}
if(A[j] >= val) return j+1;
}
int main(){
int val;
fin >> N;
for(int i = 0;i<N;i++) fin >> A[i];
fin >> M;
for(int i = 0;i<M;i++){
fin >> x >> val;
switch(x){
case 0:{fout << caut0(val) << '\n';
break; }
case 1:{fout << caut1(val) << '\n';
break; }
case 2:{fout << caut2(val) << '\n';
break; }
}
}
}