Pagini recente » Cod sursa (job #491802) | Istoria paginii runda/viata_periculoasa_pe_infoarena2 | Istoria paginii runda/aaaaaaaaaaaaaaaaaaaaaaa | Istoria paginii runda/aaaaaaaaaaaaaaaaaaaaaaa | Cod sursa (job #1263074)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("cautbin.in");
ofstream g ("cautbin.out");
const int NMAX = 100000 + 1;
int n;
int v[NMAX];
void citeste() {
f >> n;
for (int i = 1; i <= n; i++) f >> v[i];
}
/*
0 x - cea mai mare pozitie pe care se afla un element cu valoarea x sau -1 daca aceasta valoare nu se gaseste in sir
1 x - 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
2 x - 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 caut0(int x) {
int m, st = 1, dr = n;
while (st <= dr) {
m = (st + dr) / 2;
if (v[m] == x) return m;
if (v[m] < x) st = m + 1;
else dr = m - 1;
}
return -1;
}
int caut1(int x) {
int m, st = 1, dr = n, sol;
while (st <= dr) {
m = (st + dr) / 2;
if (v[m] <= x) {sol = m; st = m + 1;}
else dr = m - 1;
}
return sol;
}
int caut2(int x) {
int m, st = 1, dr = n, sol;
while (st <= dr) {
m = (st + dr) / 2;
if (v[m] >= x) {sol = m; dr = m - 1;}
else st = m + 1;
}
return sol;
}
void rezolva() {
int m, q, x;
f >> m;
while (m--) {
f >> q >> x;
if (q == 0) g << caut0(x) << '\n';
else if (q == 1) g << caut1(x) << '\n';
else g << caut2(x) << '\n';
}
}
int main() {
citeste();
rezolva();
}