Pagini recente » Cod sursa (job #750897) | Istoria paginii runda/simulare_emag_mediu_2016_runda1/clasament | Monitorul de evaluare | Arhiva de probleme | Cod sursa (job #1176056)
#include <stdio.h>
#include <vector>
using namespace std;
int cautb0(const vector<int> &v, int val)
{
int mid, left = 0, right = v.size() - 1;
while (left <= right) {
mid = (right - left) / 2 + left;
if (val < v[mid]) {
right = mid - 1;
} else if (val >= v[mid]) {
left = mid + 1;
}
}
if (left >= 1 && v[left - 1] == val) {
return left - 1;
}
return -2;
}
int cautb1(const vector<int> &v, int val)
{
int mid, left = 0, right = v.size() - 1;
while (left <= right) {
mid = (right - left) / 2 + left;
if (val < v[mid]) {
right = mid - 1;
} else if (val >= v[mid]) {
left = mid + 1;
}
}
return left - 1;
}
int cautb2(const vector<int> &v, int val)
{
int mid, left = 0, right = v.size() - 1;
while (left <= right) {
mid = (right - left) / 2 + left;
if (val <= v[mid]) {
right = mid - 1;
}
else if (val > v[mid]) {
left = mid + 1;
}
}
return left;
}
int main()
{
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
int N, M, c, tip;
vector<int> elem;
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf("%d", &c);
elem.push_back(c);
}
scanf("%d", &M);
for (int i = 0; i < M; i++) {
scanf("%d %d", &tip, &c);
switch (tip) {
case 0:
printf("%d\n", cautb0(elem, c) + 1);
break;
case 1:
printf("%d\n", cautb1(elem, c) + 1);
break;
case 2:
printf("%d\n", cautb2(elem, c) + 1);
break;
}
}
}