Pagini recente » Cod sursa (job #944138) | Cod sursa (job #2570296) | Cod sursa (job #2728829) | Cod sursa (job #2982719) | Cod sursa (job #2372552)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n, v[100005], val, x, y, tip, M;
int read()
{
scanf("%d", &n);
for(int i=1; i<=n; i++)
scanf("%d", &v[i]);
}
int search0(int x, int y){
int m;
while (x <= y) {
m = (x + y) / 2;
if (v[m] <= val)
x = m + 1;
else
y = m - 1;
}
m = (x + y) / 2;
if(v[m] > val)
m--;
if(v[m] == val)
return m;
return -1;
}
int search1(int x, int y){
int m;
while(x < y){
m = (x + y) / 2;
if(v[m] <= val)
x = m + 1;
else
y = m;
}
m = (x + y) / 2;
if(v[m] > val)
--m;
return m;
}
int search2(int x, int y){
int m;
while(x < y){
m = (x + y) / 2;
if(v[m] < val)
x = m + 1;
else
y = m;
}
m = (x + y) / 2;
if(v[m] < val)
m++;
return m;
}
int main()
{
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
read();
scanf("%d", &M);
for(int i=0; i<M; i++){
scanf("%d%d", &tip, &val);
if(tip == 0)
printf("%d\n", search0(1, n));
else if(tip == 1)
printf("%d\n", search1(1, n));
else if(tip == 2)
printf("%d\n", search2(1, n));
}
}