Is __lg(0) problematic?
Difference between en4 and en5, changed 460 character(s)
I was just doing virtual on [problem:1338A].↵

I wrote the following code:↵
[submission:121160133]↵

and it out puts "63" on this test: N = 5, A = {-9, -2, -2, 7, 5} on both versions of C++17.↵

But I thought __lg(0) is -1?↵

Does anyone have any idea?↵

(Also I tried to use custom invocation and attempted to exit once "ans" is changed to 63 but nothing happened.)
The probably problematic part is here:↵

<spoiler summary="code">↵
    int ans = 0, mx = -1e9;↵
    for (int i = 0; i < N; i++) {↵
        mx = max(mx, A[i]);↵
        ans = max(ans, __lg(mx - A[i]) + 1);↵
        if(ans == 63){↵
            cout<<"ERROR\n";↵
            assert(false);↵
        }↵
    }↵
    cout << ans << '\n';↵
</spoiler>↵

But I thought __lg(0) is -1? Also in custom invocation, the error message never appears.↵

Does anyone have any idea?

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en6 English rgnerdplayer 2021-07-03 11:39:22 108
en5 English rgnerdplayer 2021-07-03 11:38:01 460
en4 English rgnerdplayer 2021-07-03 11:24:37 10 Tiny change: 'ation and try to exit o' -> 'ation and attempted to exit o'
en3 English rgnerdplayer 2021-07-03 11:23:35 27 Tiny change: ' -2, 7, 5}\n\nBut I ' -> ' -2, 7, 5} on both versions of C++17.\n\nBut I '
en2 English rgnerdplayer 2021-07-03 11:21:40 1006
en1 English rgnerdplayer 2021-07-03 11:20:36 1305 Initial revision (published)