Pagini recente » Cod sursa (job #2168825) | Cod sursa (job #2291631) | Cod sursa (job #751247) | Cod sursa (job #1144554) | Cod sursa (job #1263132)
#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include <cstdio>
#include <fstream>
#include <vector>
#include <deque>
#include <set>
#include <map>
#include <list>
#include <string>
#include <iterator>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include <cstring>
using namespace std;
#define DMAX 100003
#define MOD 1000003
#define min(a,b) a>b ? b : a
#define max(a,b) a<b ? b : a
int N, M, X;
vector<int> V(DMAX);
int findX(int st, int dr){
int mij = (st + dr + 1) / 2;
if (st > dr) return -1;
else if (st == dr) return V[st] == X ? st : -1;
else{
if (X >= V[mij]) return findX(mij, dr);
else return findX(st, mij - 1);
}
}
int uprbnd(int st, int dr){
int mij = (st + dr - 1) / 2;
if (st >= dr) return dr;
else{
if (X <= V[mij]) return uprbnd(st, mij);
else return uprbnd(mij + 1, dr);
}
}
int lwrbnd(int st, int dr){
int mij = (st + dr + 1) / 2;
if (st >= dr) return st;
else{
if (X >= V[mij]) return lwrbnd(mij, dr);
else return lwrbnd(st, mij - 1);
}
}
int main(){
int i, j;
freopen("cautbin.in", "r", stdin); // test
freopen("cautbin.out", "w", stdout); // cautbin
scanf("%d", &N);
for (i = 1; i <= N; i++) scanf("%d", &V[i]);
scanf("%d", &M);
while (M--){
scanf("%d %d", &i, &X);
switch (i){
case 0: printf("%d\n", findX(1, N)); break;
case 1: printf("%d\n", lwrbnd(1, N)); break;
case 2: printf("%d\n", uprbnd(1, N)); break;
default: break;
}
}
return 0;
}