Pagini recente » Cod sursa (job #898091) | Cod sursa (job #3284491) | Cod sursa (job #1231256) | Cod sursa (job #3281591) | Cod sursa (job #1604490)
#include <fstream>
#include <algorithm>
#include <vector>
#define Nmax 100099
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int N, M;
vector<int> v;
//cea mai mare pozitie pe care se afla un element cu valoarea x
//sau -1 daca aceasta valoare nu se gaseste in sir
int cb(vector<int>& v, const int& x) {
int poz = upper_bound(v.begin(), v.end(), x) - v.begin() - 1;
if(poz >= 0 && poz < (int)v.size() && v[poz] == x) {
return poz;
}
return -1;
}
//cea mai mare pozitie pe care se afla un element cu valoarea
//mai mica sau egala cu x in sir.
int cb_down(vector<int>& v, const int& x){
int poz = lower_bound(v.begin(), v.end(), x+1) - v.begin() - 1;
if(poz >= 0 && poz < (int)v.size() && v[poz] <= x) {
return poz;
}
return -1;
}
//cea mai mica pozitie pe care se afla un element cu valoarea
//mai mare sau egala cu x in sir.
int cb_up(vector<int>& v, const int& x) {
int poz = upper_bound(v.begin(), v.end(), x-1) - v.begin();
if(poz >= 0 && poz < (int)v.size() && v[poz] >= x) {
return poz;
}
return -1;
}
int main() {
f >> N;
for(int i = 1; i <= N; ++i) {
int x;
f >> x;
v.push_back(x);
}
f >> M;
for(int i = 1; i <= M; ++i) {
int tip, x;
f >> tip >> x;
if(!tip) {
g << cb(v, x) + 1<<'\n';
continue;
}
if(tip == 1) {
g << cb_up(v, x) + 1<<'\n';
continue;
}
if(tip == 2) {
g << cb_down(v, x) + 1<<'\n';
//continue;
}
}
f.close();g.close();
return 0;
}