#include <iostream>
#include <utility>
template<unsigned... N> struct seq { typedef seq<N...> type; };
template<unsigned k, typename S>
struct seek;
template<unsigned N0, unsigned... N>
struct seek< 0, seq<N0, N...> >:
std::integral_constant<unsigned, N0>
{
typedef seq<N...> after;
enum { depth = 1 };
};
template<unsigned N0, unsigned N1, unsigned... N>
struct seek< 1, seq<N0, N1, N...> >:
std::integral_constant<unsigned, N1>
{
typedef seq<N...> after;
enum { depth = 1 };
};
template<unsigned K, unsigned... N>
struct seek< K, seq<N...> >:
seek< K/2, typename seek< K - K/2-1, seq<N...> >::after >
{
enum {
parent_0 = seek< K - K/2 -1, seq<N...> >::depth,
parent_1 = seek< K/2, typename seek< K-K/2-1, seq<N...> >::after >::depth,
depth = 1 + (parent_0<parent_1?parent_1:parent_0),
};
};
typedef seq<1,2,3,4,5> elements;
int main() {
std::cout << seek<0, elements>::value << " in " << seek<0, elements>::depth << "steps\n";
std::cout << seek<1, elements>::value << " in " << seek<1, elements>::depth << "steps\n";
std::cout << seek<2, elements>::value << " in " << seek<2, elements>::depth << "steps\n";
std::cout << seek<3, elements>::value << " in " << seek<3, elements>::depth << "steps\n";
std::cout << seek<4, elements>::value << " in " << seek<4, elements>::depth << "steps\n";
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KCnRlbXBsYXRlPHVuc2lnbmVkLi4uIE4+IHN0cnVjdCBzZXEgeyB0eXBlZGVmIHNlcTxOLi4uPiB0eXBlOyB9OwoKdGVtcGxhdGU8dW5zaWduZWQgaywgdHlwZW5hbWUgUz4Kc3RydWN0IHNlZWs7Cgp0ZW1wbGF0ZTx1bnNpZ25lZCBOMCwgdW5zaWduZWQuLi4gTj4Kc3RydWN0IHNlZWs8IDAsIHNlcTxOMCwgTi4uLj4gPjoKCXN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8dW5zaWduZWQsIE4wPgp7Cgl0eXBlZGVmIHNlcTxOLi4uPiBhZnRlcjsKCWVudW0geyBkZXB0aCA9IDEgfTsKfTsKCnRlbXBsYXRlPHVuc2lnbmVkIE4wLCB1bnNpZ25lZCBOMSwgdW5zaWduZWQuLi4gTj4Kc3RydWN0IHNlZWs8IDEsIHNlcTxOMCwgTjEsIE4uLi4+ID46CglzdGQ6OmludGVncmFsX2NvbnN0YW50PHVuc2lnbmVkLCBOMT4KewoJdHlwZWRlZiBzZXE8Ti4uLj4gYWZ0ZXI7CgllbnVtIHsgZGVwdGggPSAxIH07Cn07Cgp0ZW1wbGF0ZTx1bnNpZ25lZCBLLCB1bnNpZ25lZC4uLiBOPgpzdHJ1Y3Qgc2VlazwgSywgc2VxPE4uLi4+ID46CglzZWVrPCBLLzIsIHR5cGVuYW1lIHNlZWs8IEsgLSBLLzItMSwgc2VxPE4uLi4+ID46OmFmdGVyID4KewoJZW51bSB7CgkJcGFyZW50XzAgPSBzZWVrPCBLIC0gSy8yIC0xLCBzZXE8Ti4uLj4gPjo6ZGVwdGgsCgkJcGFyZW50XzEgPSBzZWVrPCBLLzIsIHR5cGVuYW1lIHNlZWs8IEstSy8yLTEsIHNlcTxOLi4uPiA+OjphZnRlciA+OjpkZXB0aCwKCQlkZXB0aCA9IDEgKyAocGFyZW50XzA8cGFyZW50XzE/cGFyZW50XzE6cGFyZW50XzApLAoJfTsKfTsKCnR5cGVkZWYgc2VxPDEsMiwzLDQsNT4gZWxlbWVudHM7CgppbnQgbWFpbigpIHsKCXN0ZDo6Y291dCA8PCBzZWVrPDAsIGVsZW1lbnRzPjo6dmFsdWUgPDwgIiBpbiAiIDw8IHNlZWs8MCwgZWxlbWVudHM+OjpkZXB0aCA8PCAgInN0ZXBzXG4iOwoJc3RkOjpjb3V0IDw8IHNlZWs8MSwgZWxlbWVudHM+Ojp2YWx1ZSA8PCAiIGluICIgPDwgc2VlazwxLCBlbGVtZW50cz46OmRlcHRoIDw8ICAic3RlcHNcbiI7CglzdGQ6OmNvdXQgPDwgc2VlazwyLCBlbGVtZW50cz46OnZhbHVlIDw8ICIgaW4gIiA8PCBzZWVrPDIsIGVsZW1lbnRzPjo6ZGVwdGggPDwgICJzdGVwc1xuIjsKCXN0ZDo6Y291dCA8PCBzZWVrPDMsIGVsZW1lbnRzPjo6dmFsdWUgPDwgIiBpbiAiIDw8IHNlZWs8MywgZWxlbWVudHM+OjpkZXB0aCA8PCAgInN0ZXBzXG4iOwoJc3RkOjpjb3V0IDw8IHNlZWs8NCwgZWxlbWVudHM+Ojp2YWx1ZSA8PCAiIGluICIgPDwgc2Vlazw0LCBlbGVtZW50cz46OmRlcHRoIDw8ICAic3RlcHNcbiI7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglyZXR1cm4gMDsKfQo=