Mai intai trebuie sa te autentifici.
Cod sursa(job #2338126)
| Utilizator | Data | 7 februarie 2019 02:10:22 | |
|---|---|---|---|
| Problema | Cautare binara | Scor | 60 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 1.35 kb |
#include <fstream>
#include <algorithm>
using namespace std;
int v[100010], n, stanga, putere, op, x, i, m;
ifstream fin ("cautbin.in");
ofstream fout("cautbin.out");
int main () {
fin>>n;
for(i=1;i<=n;i++)
fin>>v[i];
fin>>m;
for (i=1;i<=m;i++) {
fin>>op>>x;
if (op == 0 || op == 1) {
/// cea mai mare pozitie pe care se afla x sau -1
stanga = 1; putere = (1<<17);
while (putere) {
if (stanga + putere <= n) {
if (v[stanga+putere] <= x)
stanga += putere;
}
putere /= 2;
}
if (op == 0)
if (v[stanga] == x)
fout<<stanga<<"\n";
else
fout<<"-1\n";
else
fout<<stanga<<"\n";
}
if (op == 2) {
/// prima pozitie pe care este x si daca nu, unde e un
/// numar mai mare ca x
putere = (1<<17);
stanga = 1;
while (putere) {
if (stanga + putere <= n)
if (v[stanga + putere] < x)
stanga += putere;
putere /= 2;
}
fout<<stanga+1<<"\n";
}
}
return 0;
}
