src/edh/cantor/inv/lib.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include "../../../ds/segtree/w/lib.hpp" | ||
| 4 | |||
| 5 | namespace tifa_libs { | ||
| 6 | |||
| 7 | //! [0, n) | ||
| 8 | //! p \in [1, n], a_i == a_j \iff i == j | ||
| 9 | 592 | CEXP vecu cantor_inv_seq(spnu s) NE { | |
| 10 | 592 | cu32 n = (u32)s.size(); | |
| 11 | 592 | weighted_segtree tr(n + 1); | |
| 12 |
2/2✓ Branch 1 taken 613310 times.
✓ Branch 2 taken 592 times.
|
613902 | flt_ (u32, i, 1, n + 1) tr.ins(i); |
| 13 | 592 | vecu p(n); | |
| 14 |
2/2✓ Branch 4 taken 613310 times.
✓ Branch 5 taken 592 times.
|
613902 | flt_ (u32, i, 0, n) tr.del(p[i] = tr.kth_min(s[i] + 1)); |
| 15 | 592 | return p; | |
| 16 | 592 | } | |
| 17 | |||
| 18 | } // namespace tifa_libs | ||
| 19 |