Pagini recente » Cod sursa (job #1473051) | Cod sursa (job #2376178) | Cod sursa (job #2273559) | Cod sursa (job #1655735) | Cod sursa (job #2666588)
#include <bits/stdc++.h>
using namespace std;
int n, m, x, p, v[100005];
void caut0(int a)
{
int st = 1, dr = n, mijloc;
while(dr - st > 1){
mijloc = (st + dr)/2;
if (v[mijloc] > a){
dr = mijloc;
}else{
st = mijloc;
}
}
if (v[st] > a)
st --;
if (a == v[st]){
printf("%d\n", st);
}else{
printf("%d\n", -1);
}
}
void caut1(int a)
{
int st = 1, dr = n, mijloc;
while(dr - st > 1){
mijloc = (st + dr)/2;
if (v[mijloc] > a){
dr = mijloc;
}else{
st = mijloc;
}
}
if (v[st] > a)
st --;
printf("%d\n", st);
}
void caut2(int a)
{
int st = 1, dr = n, mijloc;
while(dr - st > 1){
mijloc = (st + dr)/2;
if (v[mijloc] >= a){
dr = mijloc;
}else{
st = mijloc;
}
}
if (v[st] < a)
st ++;
printf("%d\n", st);
}
int main() {
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
scanf("%d", &n);
for (int i=1;i<=n;i++){
scanf("%d", &v[i]);
}
scanf("%d", &m);
for (int i=1;i<=m;i++){
scanf("%d%d", &p, &x);
if (p == 0){
caut0(x);
}else if (p == 1){
caut1(x);
}else{
caut2(x);
}
}
return 0;
}