Pagini recente » Cod sursa (job #1405341) | Cod sursa (job #3127487) | Cod sursa (job #2911651) | Cod sursa (job #54521) | Cod sursa (job #2666272)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
#define NMAX 100001
int v[NMAX], n, i, m, x, tip;
int cbMPpoz(int x) {
int i, step, poz = -1;
for(step = 1; step < n; step = (step << 1));
for(i = 0; step != 0; step = (step >> 1))
if(i + step <= n && v[i + step] <= x) {
if(v[i + step] == x)
poz = i + step;
i += step;
}
return poz;
}
int cbMPdr(int x) {
int i, step;
for(step = 1; step < n ; step = (step << 1));
for(i = 0; step != 0; step = (step >> 1))
if(i + step <= n && v[i + step] <= x)
i += step;
return i;
}
int cbSt(int x) {
int st = 1, dr = n;
while(st <= dr) {
int mid = (st + dr) / 2;
if(x <= v[mid])
dr = mid - 1;
else st = mid + 1;
}
return st;
}
int main() {
cin >> n;
for(i = 1; i <= n; i++)
cin >> v[i];
cin >> m;
for(i = 1; i <= m; i++) {
cin >> tip >> x;
if(tip == 0)
cout << cbMPpoz(x);
else if(tip == 1)
cout << cbMPdr(x);
else cout << cbSt(x);
cout << '\n';
}
return 0;
}