# PBinfo #1240 – Ab3 – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

Cerința
Se se determine pentru n numere a valoarea b maximă astfel încât b3 + b ≤ a.

Date de intrare
Fișierul de intrare ab3.in conține pe prima linie numărul n, iar pe următoarele n linii câte un număr a.

Date de ieșire
Fișierul de ieșire ab3.out va conține n linii cu câte un număr fiecare, răspunsul la fiecare întrebare.

Restricții și precizări

1 ≤ n ≤ 100.000
0 ≤ a ≤ 1018
Pentru 40% din teste, se garantează că n * b ≤ 106
Atenție la limita de memorie!

Exemple:
ab3.in

5
1 
9 
36
27
89
ab3.out

0
1
3
2
4
Explicație
13 + 1 = 2
23 + 2 = 10
33 + 3 = 30
43 + 4 = 68
53 + 5 = 130

## Cod sursă C++

```cpp
#include <fstream>
using namespace std;
ifstream fin ("ab3.in");
ofstream fout ("ab3.out");
typedef unsigned long long ull;
int n;
ull a, b, st = 1 << 19;
int main() {
    fin >> n;
    for (int i = 0; i < n; ++i) {
        fin >> a;
        ull b = 0;
        for (ull step = st; step; step >>= 1)
            if ((b + step) * (b + step) * (b + step) +(b + step) <= a)
                b += step;
        fout << b << "\n";
    }
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/1240)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/1240/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-1240/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
