Pagini recente » Cod sursa (job #2693207) | Cod sursa (job #1215532) | Cod sursa (job #930130) | Cod sursa (job #1310664) | Cod sursa (job #2154087)
#include <cstdio>
using namespace std;
int sir[100005];
int n, m;
int bs1(int x, int tip){
int putere;
int sol;
for(putere = 1; putere < n; putere <<= 1);
for(sol = 0; putere >= 1; putere >>= 1){
if(putere + sol <= n && sir[sol + putere] <= x){
sol += putere;
}
}
if(sir[sol] != x && tip == 0){
return -1;
}
else{
return sol;
}
}
int bs3(int x){
int putere;
int sol;
for(putere = 1; putere < n; putere <<= 1);
for(sol = n; putere >= 1; putere >>= 1){
if(sol - putere >= 0 && sir[sol - putere] >= x){
sol -= putere;
}
}
return sol;
}
int main()
{
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i <= n; i++){
scanf("%d", &sir[i]);
}
scanf("%d", &m);
int x, y;
for(int k = 0; k < m; k++){
scanf("%d %d", &x, &y);
if(x == 0){
printf("%d\n", bs1(y, x));
}
if(x == 1){
printf("%d\n", bs1(y, x));
}
if(x == 2){
printf("%d\n", bs3(y));
}
}
return 0;
}