Pagini recente » Cod sursa (job #1085076) | Cod sursa (job #3002259) | Cod sursa (job #670809) | Cod sursa (job #875896) | Cod sursa (job #1890541)
#include <fstream>
#include <vector>
#include <iostream>
#include <iterator>
#include <algorithm>
using namespace std;
int cautbin(const vector<int> &v, int x)
{
int i = 0, j = v.size();
while (i < j) {
int m = i + (j-i)/2;
if (x < v[m]) {
j = m-1;
} else if (x > v[m]){
i = m+1;
} else {
return m;
}
}
return -1;
}
int upper(const vector<int> &v, int x)
{
int i = 0, j = v.size()-1;
while (i < j) {
int m = i + (j-i)/2;
if (x > v[m]) {
i = m+1;
} else {
j = m;
}
}
return i;
}
int lower(const vector<int> &v, int x)
{
int i = 0, j = v.size();
while (i < j) {
int m = i + (j-i)/2;
if (x < v[m]) {
j = m-1;
} else {
i = m;
}
}
return i;
}
int main()
{
ios_base::sync_with_stdio(false);
ifstream f("cautbin.in");
int n;
f >> n;
vector<int> v(n);
for (int i = 0; i < n; ++i) {
f >> v[i];
}
int m;
f >> m;
ofstream g("cautbin.out");
for (int i = 0; i < m; ++i) {
int op, x;
f >> op >> x;
if (op == 0) {
int pos = cautbin(v, x);
if (pos > 0) {
while (v[pos] == x) ++pos;
}
g << pos << '\n';
} if (op == 1) {
int pos = distance(v.begin(), upper_bound(v.begin(), v.end(), x));
g << pos + 1 << '\n';
} if (op == 2) {
int pos = distance(v.begin(), lower_bound(v.begin(), v.end(), x));
g << pos + 1<< '\n';
}
}
f.close();
g.close();
return 0;
}