This documentation is automatically generated by online-judge-tools/verification-helper
View the Project on GitHub kmyk/competitive-programming-library
// http://yukicoder.me/submissions/142657 struct sequence { vector<int> data; int offset, cycle; }; sequence iterate(int a, function<int (int)> f) { sequence xs; map<int, int> used; while (not used.count(a)) { used[a] = xs.data.size(); xs.data.push_back(a); a = f(a); } xs.offset = used[a]; xs.cycle = xs.data.size() - xs.offset; return xs; } int at(sequence const & xs, int i) { return xs.data[i < xs.offset ? i : (i - xs.offset) % xs.cycle + xs.offset]; }
#line 1 "old/iterate.inc.cpp" // http://yukicoder.me/submissions/142657 struct sequence { vector<int> data; int offset, cycle; }; sequence iterate(int a, function<int (int)> f) { sequence xs; map<int, int> used; while (not used.count(a)) { used[a] = xs.data.size(); xs.data.push_back(a); a = f(a); } xs.offset = used[a]; xs.cycle = xs.data.size() - xs.offset; return xs; } int at(sequence const & xs, int i) { return xs.data[i < xs.offset ? i : (i - xs.offset) % xs.cycle + xs.offset]; }