Pagini recente » Cod sursa (job #1601815) | Cod sursa (job #1883064) | Cod sursa (job #12424) | Cod sursa (job #3289936) | Cod sursa (job #1615968)
#include <fstream>
#include <algorithm>
#define Nmax 100099
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n,m,v[Nmax];
// cea mai mare/cea mai mica pozitie pe care se afla x;
// Se garanteaza ca cel mai mic numar al sirului este mai mic sau egal decat x
int cb(int v[Nmax], int x) {
//int poz=lower_bound(v+1, v+1+n, x+1) - v - 1;
int poz=upper_bound(v+1, v+1+n, x-1) - v;
if (poz >= 1 && poz <= n && v[poz] == x) {
return poz;
} else {
return -1;
}
}
// cea mai mare pozitie pe care se afla un element cu valoarea mai mica sau egala cu x in sir.
// Se garanteaza ca cel mai mic numar al sirului este mai mic sau egal decat x
int cb_down(int v[Nmax], int x) {
int poz=lower_bound(v+1, v+1+n, x+1) - v - 1;
if (poz >= 1 && poz <= n && v[poz] <= x) {
return poz;
} else {
return -1;
}
}
// cea mai mica pozitie pe care se afla un element cu valoarea mai mare sau egala cu x in sir.
// Se garanteaza ca cel mai mare numar din sir este mai mare sau egal decat x
int cb_up(int v[Nmax], int x) {
int poz=upper_bound(v+1, v+1+n, x-1) - v;
if (poz >= 1 && poz <= n && v[poz] >= x) {
return poz;
} else {
return -1;
}
}
int main() {
f >> n;
for(int i = 1; i <= n; ++i) {
f >> v[i];
}
f >> m;
for(int i = 1; i <= m; ++i) {
int tip, x;
f >> tip >> x;
if(!tip) {
g << cb(v, x)<<'\n';
continue;
}
if(tip == 1) {
g << cb_down(v, x)<<'\n';
continue;
}
if(tip == 2) {
g << cb_up(v, x)<<'\n';
//continue;
}
}
f.close();g.close();
return 0;
}