Pagini recente » Cod sursa (job #1566992) | Cod sursa (job #2370525) | Cod sursa (job #324468) | Cod sursa (job #1571845) | Cod sursa (job #1773312)
#include "fstream"
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
const int NMAX = 100005;
int N, M;
int a[NMAX];
int getBiggest(int x) {
int pow = 1;
int res = 0;
while(pow * 2 <= N) {
pow *= 2;
}
while(pow) {
if(res + pow <= N && a[res + pow] <= x) {
res += pow;
}
pow /= 2;
}
return res;
}
int getSmallest(int x) {
int pow = 1;
int res = 0;
while(pow * 2 <= N) {
pow *= 2;
}
while(pow) {
if(res + pow <= N && a[res + pow] < x) {
res += pow;
}
pow /= 2;
}
return res + 1;
}
int main() {
fin >> N;
for(int i = 1 ; i <= N ; i++) {
fin >> a[i];
}
fin >> M;
int type, x;
for(int i = 1 ; i <= M ; i++) {
fin >> type >> x;
if(type < 2) {
int res = getBiggest(x);
if(type == 0 && a[res] != x) {
res = -1;
}
fout << res << '\n';
}
else {
fout << getSmallest(x) << '\n';
}
}
return 0;
}