src/opt/smawk/lib.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include "../../util/alias/others/lib.hpp" | ||
| 4 | |||
| 5 | namespace tifa_libs { | ||
| 6 | |||
| 7 | //! $h(r) = argmin_i a_{r,i}$ MUST be non-decreasing | ||
| 8 | // a: $[0, n) \times [0, m)$ | ||
| 9 | // @param f: f(u32, u32, u32) NE -> bool | ||
| 10 | // f(r, x, y): $a_{r,x}\leq a_{r,y}$ | ||
| 11 | template <class Ft> | ||
| 12 | 35240 | CEXP vecu smawk(u32 n, u32 m, Ft&& f) NE { | |
| 13 | 35240 | vecu ans(n); | |
| 14 | 190423736 | auto g = [&](auto&& g, u32 u, u32 d, u32 l, u32 r) NE -> void { | |
| 15 |
4/4void tifa_libs::smawk<tifa_libs::conv_minplus_cv<unsigned int>(std::vector<unsigned int, std::allocator<unsigned int> > const&, std::vector<unsigned int, std::allocator<unsigned int> > const&)::{lambda(unsigned int, unsigned int, unsigned int)#1}>(unsigned int, unsigned int, tifa_libs::conv_minplus_cv<unsigned int>(std::vector<unsigned int, std::allocator<unsigned int> > const&, std::vector<unsigned int, std::allocator<unsigned int> > const&)::{lambda(unsigned int, unsigned int, unsigned int)#1}&&)::{lambda(auto:1&&, unsigned int, unsigned int, unsigned int, unsigned int)#1}::operator()<{lambda(auto:1&&, unsigned int, unsigned int, unsigned int, unsigned int)#1}&>(tifa_libs::conv_minplus_cv<unsigned int>(std::vector<unsigned int, std::allocator<unsigned int> > const&, std::vector<unsigned int, std::allocator<unsigned int> > const&)::{lambda(unsigned int, unsigned int, unsigned int)#1}&&, unsigned int, unsigned int, unsigned int, unsigned int) const:
✓ Branch 0 taken 20465030 times.
✓ Branch 1 taken 20464989 times.
void tifa_libs::smawk<tifa_libs::larsch_2d<long, main::{lambda(unsigned int, unsigned int)#1}&>(unsigned int, main::{lambda(unsigned int, unsigned int)#1}&, long)::{lambda(unsigned int, unsigned int, unsigned int)#1}>(unsigned int, unsigned int, tifa_libs::larsch_2d<long, main::{lambda(unsigned int, unsigned int)#1}&>(unsigned int, main::{lambda(unsigned int, unsigned int)#1}&, long)::{lambda(unsigned int, unsigned int, unsigned int)#1}&&)::{lambda(auto:1&&, unsigned int, unsigned int, unsigned int, unsigned int)#1}::operator()<{lambda(auto:1&&, unsigned int, unsigned int, unsigned int, unsigned int)#1}&>(tifa_libs::larsch_2d<long, main::{lambda(unsigned int, unsigned int)#1}&>(unsigned int, main::{lambda(unsigned int, unsigned int)#1}&, long)::{lambda(unsigned int, unsigned int, unsigned int)#1}&&, unsigned int, unsigned int, unsigned int, unsigned int) const:
✓ Branch 0 taken 74746838 times.
✓ Branch 1 taken 74711639 times.
|
190388496 | if (u == d) return; |
| 16 |
2/4void tifa_libs::smawk<tifa_libs::conv_minplus_cv<unsigned int>(std::vector<unsigned int, std::allocator<unsigned int> > const&, std::vector<unsigned int, std::allocator<unsigned int> > const&)::{lambda(unsigned int, unsigned int, unsigned int)#1}>(unsigned int, unsigned int, tifa_libs::conv_minplus_cv<unsigned int>(std::vector<unsigned int, std::allocator<unsigned int> > const&, std::vector<unsigned int, std::allocator<unsigned int> > const&)::{lambda(unsigned int, unsigned int, unsigned int)#1}&&)::{lambda(auto:1&&, unsigned int, unsigned int, unsigned int, unsigned int)#1}::operator()<{lambda(auto:1&&, unsigned int, unsigned int, unsigned int, unsigned int)#1}&>(tifa_libs::conv_minplus_cv<unsigned int>(std::vector<unsigned int, std::allocator<unsigned int> > const&, std::vector<unsigned int, std::allocator<unsigned int> > const&)::{lambda(unsigned int, unsigned int, unsigned int)#1}&&, unsigned int, unsigned int, unsigned int, unsigned int) const:
✗ Branch 0 not taken.
✓ Branch 1 taken 20464989 times.
void tifa_libs::smawk<tifa_libs::larsch_2d<long, main::{lambda(unsigned int, unsigned int)#1}&>(unsigned int, main::{lambda(unsigned int, unsigned int)#1}&, long)::{lambda(unsigned int, unsigned int, unsigned int)#1}>(unsigned int, unsigned int, tifa_libs::larsch_2d<long, main::{lambda(unsigned int, unsigned int)#1}&>(unsigned int, main::{lambda(unsigned int, unsigned int)#1}&, long)::{lambda(unsigned int, unsigned int, unsigned int)#1}&&)::{lambda(auto:1&&, unsigned int, unsigned int, unsigned int, unsigned int)#1}::operator()<{lambda(auto:1&&, unsigned int, unsigned int, unsigned int, unsigned int)#1}&>(tifa_libs::larsch_2d<long, main::{lambda(unsigned int, unsigned int)#1}&>(unsigned int, main::{lambda(unsigned int, unsigned int)#1}&, long)::{lambda(unsigned int, unsigned int, unsigned int)#1}&&, unsigned int, unsigned int, unsigned int, unsigned int) const:
✗ Branch 0 not taken.
✓ Branch 1 taken 74711639 times.
|
95176628 | assert(l < r); |
| 17 | 95176628 | cu32 rmid = (u + d) / 2; | |
| 18 | 95176628 | u32 cm = l; | |
| 19 |
4/4void tifa_libs::smawk<tifa_libs::conv_minplus_cv<unsigned int>(std::vector<unsigned int, std::allocator<unsigned int> > const&, std::vector<unsigned int, std::allocator<unsigned int> > const&)::{lambda(unsigned int, unsigned int, unsigned int)#1}>(unsigned int, unsigned int, tifa_libs::conv_minplus_cv<unsigned int>(std::vector<unsigned int, std::allocator<unsigned int> > const&, std::vector<unsigned int, std::allocator<unsigned int> > const&)::{lambda(unsigned int, unsigned int, unsigned int)#1}&&)::{lambda(auto:1&&, unsigned int, unsigned int, unsigned int, unsigned int)#1}::operator()<{lambda(auto:1&&, unsigned int, unsigned int, unsigned int, unsigned int)#1}&>(tifa_libs::conv_minplus_cv<unsigned int>(std::vector<unsigned int, std::allocator<unsigned int> > const&, std::vector<unsigned int, std::allocator<unsigned int> > const&)::{lambda(unsigned int, unsigned int, unsigned int)#1}&&, unsigned int, unsigned int, unsigned int, unsigned int) const:
✓ Branch 0 taken 203543567 times.
✓ Branch 1 taken 20464989 times.
void tifa_libs::smawk<tifa_libs::larsch_2d<long, main::{lambda(unsigned int, unsigned int)#1}&>(unsigned int, main::{lambda(unsigned int, unsigned int)#1}&, long)::{lambda(unsigned int, unsigned int, unsigned int)#1}>(unsigned int, unsigned int, tifa_libs::larsch_2d<long, main::{lambda(unsigned int, unsigned int)#1}&>(unsigned int, main::{lambda(unsigned int, unsigned int)#1}&, long)::{lambda(unsigned int, unsigned int, unsigned int)#1}&&)::{lambda(auto:1&&, unsigned int, unsigned int, unsigned int, unsigned int)#1}::operator()<{lambda(auto:1&&, unsigned int, unsigned int, unsigned int, unsigned int)#1}&>(tifa_libs::larsch_2d<long, main::{lambda(unsigned int, unsigned int)#1}&>(unsigned int, main::{lambda(unsigned int, unsigned int)#1}&, long)::{lambda(unsigned int, unsigned int, unsigned int)#1}&&, unsigned int, unsigned int, unsigned int, unsigned int) const:
✓ Branch 0 taken 837160148 times.
✓ Branch 1 taken 74711639 times.
|
1135880343 | flt_ (u32, col, l + 1, r) |
| 20 |
4/4void tifa_libs::smawk<tifa_libs::conv_minplus_cv<unsigned int>(std::vector<unsigned int, std::allocator<unsigned int> > const&, std::vector<unsigned int, std::allocator<unsigned int> > const&)::{lambda(unsigned int, unsigned int, unsigned int)#1}>(unsigned int, unsigned int, tifa_libs::conv_minplus_cv<unsigned int>(std::vector<unsigned int, std::allocator<unsigned int> > const&, std::vector<unsigned int, std::allocator<unsigned int> > const&)::{lambda(unsigned int, unsigned int, unsigned int)#1}&&)::{lambda(auto:1&&, unsigned int, unsigned int, unsigned int, unsigned int)#1}::operator()<{lambda(auto:1&&, unsigned int, unsigned int, unsigned int, unsigned int)#1}&>(tifa_libs::conv_minplus_cv<unsigned int>(std::vector<unsigned int, std::allocator<unsigned int> > const&, std::vector<unsigned int, std::allocator<unsigned int> > const&)::{lambda(unsigned int, unsigned int, unsigned int)#1}&&, unsigned int, unsigned int, unsigned int, unsigned int) const:
✓ Branch 1 taken 22338679 times.
✓ Branch 2 taken 181204888 times.
void tifa_libs::smawk<tifa_libs::larsch_2d<long, main::{lambda(unsigned int, unsigned int)#1}&>(unsigned int, main::{lambda(unsigned int, unsigned int)#1}&, long)::{lambda(unsigned int, unsigned int, unsigned int)#1}>(unsigned int, unsigned int, tifa_libs::larsch_2d<long, main::{lambda(unsigned int, unsigned int)#1}&>(unsigned int, main::{lambda(unsigned int, unsigned int)#1}&, long)::{lambda(unsigned int, unsigned int, unsigned int)#1}&&)::{lambda(auto:1&&, unsigned int, unsigned int, unsigned int, unsigned int)#1}::operator()<{lambda(auto:1&&, unsigned int, unsigned int, unsigned int, unsigned int)#1}&>(tifa_libs::larsch_2d<long, main::{lambda(unsigned int, unsigned int)#1}&>(unsigned int, main::{lambda(unsigned int, unsigned int)#1}&, long)::{lambda(unsigned int, unsigned int, unsigned int)#1}&&, unsigned int, unsigned int, unsigned int, unsigned int) const:
✓ Branch 1 taken 412044282 times.
✓ Branch 2 taken 425115866 times.
|
1040703715 | if (!f(rmid, cm, col)) cm = col; |
| 21 | 95176628 | ans[rmid] = cm, g(g, u, rmid, l, cm + 1), g(g, rmid + 1, d, cm, r); | |
| 22 | }; | ||
| 23 | 35240 | g(g, 0, n, 0, m); | |
| 24 | 35240 | return ans; | |
| 25 | } | ||
| 26 | |||
| 27 | } // namespace tifa_libs | ||
| 28 |