Pagini recente » Cod sursa (job #1499578) | Cod sursa (job #574901) | Borderou de evaluare (job #2593670) | Cod sursa (job #1451505) | Cod sursa (job #3207114)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n, v[100005], m;
bool check0(int ind, int val){
return v[ind]<=val;
}
bool check1(int ind, int val){
return v[ind]<=val;
}
bool check2(int ind, int val){
return v[ind]<val;
}
bool check(int type, int ind, int val){
switch(type){
case 0:
return check0(ind, val);
case 1:
return check1(ind, val);
case 2:
return check2(ind, val);
}
}
int cautbin(int type, int val){
int pas = 1<<16, sol=0;
while(pas){
if(check(type, sol+pas, val) && sol+pas<=n && sol+pas>=1){
sol+=pas;
}
pas>>=1;
}
if(v[sol] != val && type == 0){
return -1;
}
if(type==2){
return sol+1;
}
return sol;
}
int main(){
fin>>n;
for(int i=1;i<=n;i++){
fin>>v[i];
}
fin>>m;
for(int i=1;i<=m;i++){
int type, val;
fin>>type>>val;
fout<<cautbin(type, val)<<"\n";
}
return 0;
}