Pagini recente » Cod sursa (job #294619) | Cod sursa (job #3292277) | Cod sursa (job #2113091) | Cod sursa (job #1071937) | Cod sursa (job #2555945)
#include <bits/stdc++.h>
using namespace std;
int n, v[100001], m, nr, caz;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
void bs0(int nr) {
int left = 1, right = n, mid;
while(left <= right) {
mid = (left + right) / 2;
if(v[mid] > nr) {
right = mid - 1;
} else {
left = mid + 1;
}
}
mid = (left + right) / 2;
if(v[mid] > nr) {
mid -= 1;
}
if(v[mid] == nr) {
g << mid << '\n';
return;
}
g << -1 << '\n';
}
void bs1(int nr) {
int left = 1, right = n, mid, sol;
while(left <= right) {
mid = (left + right) / 2;
if(v[mid] > nr) {
right = mid - 1;
} else {
sol = mid;
left = mid + 1;
}
}
g << sol << '\n'; /// garantat valoare dif -1
}
void bs2(int nr) {
int left = 1, right = n, mid, sol = -1;
while(left <= right) {
mid = (left + right) / 2;
if(v[mid] >= nr) {
right = mid - 1;
sol = mid;
} else {
left = mid + 1;
}
}
g << sol << '\n'; /// garantat valoare dif -1
}
int main()
{
f >> n;
for(int i = 1; i <= n; i++) {
f >> v[i];
}
f >> m;
for(int i = 1; i <= m; i++) {
f >> caz >> nr;
if(caz == 0) {
bs0(nr);
continue;
}
if(caz == 1) {
bs1(nr);
} else {
bs2(nr);
}
}
return 0;
}