Pagini recente » Cod sursa (job #1834277) | Cod sursa (job #2533870) | Cod sursa (job #1186631) | Cod sursa (job #2595016) | Cod sursa (job #2429238)
#include <stdio.h>
#include <bits/stdc++.h>
#define rep(i, n) for(int i = 0; i < n; i++)
#define repa(i, l, r) for (int i = l; i < r; i++)
#define repd(i, r, l) for (int i = r; i > l; i--)
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
const int Nmax = 100555;
ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");
int N,M;
int a[Nmax];
int op_01(int x) {
// for operations type 0 and 1.
// cea mai mare pozitie cu un element <= x
int lo = 0, hi = N-1;
while (lo < hi) {
int mid = lo + (hi + 1 - lo) / 2;
if (a[mid] <= x) {
lo = mid;
} else { // a[mid] > x
hi = mid - 1;
}
}
return lo;
}
int op_2(int x) {
// cea mai mica pozitie cu un element >= x
int lo = 0, hi = N-1;
while (lo < hi) {
int mid = lo + (hi - lo) / 2;
if (a[mid] >= x) {
hi = mid;
} else { // a[mid] < x
lo = mid + 1;
}
}
return lo;
}
int main(void) {
fin >> N;
rep(i, N) {
fin >> a[i];
}
int q,x;
fin >> M;
rep(i,M) {
fin >> q >> x;
if (q == 0) {
// find x or output -1;
int res = op_01(x);
fout << (a[res] == x ? res + 1 : -1) << '\n';
} else if (q == 1) {
// cea mai mare pozitie cu un element <= x
fout << op_01(x) + 1 << '\n';
} else if (q == 2) {
// cea mai mica pozitie cu un element >= x
fout << op_2(x) + 1 << '\n';
}
}
return 0;
}