Pagini recente » Cod sursa (job #1538969) | Cod sursa (job #1998628) | Cod sursa (job #1663134) | Cod sursa (job #2509508) | Cod sursa (job #1890090)
#include <fstream>
#include <vector>
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();
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 != -1) {
for(; v[pos] == x; ++pos);
}
g << pos<< "\n";
} if (op == 1) {
int pos = lower(v, x);
for(; pos < v.size()-1 && v[pos+1] == x; ++pos);
g << pos+1 << "\n";
} if (op == 2) {
int pos = upper(v, x);
for(; pos > 0 && v[pos-1] == x; --pos);
g << pos+1 << "\n";
}
}
f.close();
g.close();
return 0;
}