#include #include using namespace std; #include using namespace atcoder; int main(){ std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n; long long k; cin >> n >> k; vector a(n); for(int i = 0; i < n; i++){ cin >> a[i]; a[i]--; } vector sa = suffix_array(a), len(n); vector lensum(n + 1, 0); for(int i = 0; i < n; i++){ len[i] = n - sa[i]; lensum[i + 1] = lensum[i] + len[i]; } int l = 0, r = n - 1; long long rem = k; vector ans; for(int i = 0; i < n; i++){ auto range = [&](int val){ int ok = l - 1, ng = r + 1; while(ng - ok > 1){ int check = (ok + ng) / 2; if(sa[check] + i >= n || a[sa[check] + i] <= val) ok = check; else ng = check; } return ok; }; auto num = [&](int val){ int right = range(val); long long res = lensum[right + 1] - lensum[l] - (long long)(right - l + 1) * i; return res; }; int ok = -1, ng = n + 1; long long c; while(ng - ok > 1){ int check = (ok + ng) / 2; long long cnt = num(check); if(cnt < rem) c = cnt, ok = check; else ng = check; } ans.emplace_back(ng + 1); rem -= num(ok); int left = range(ok) + 1, right = range(ng); l = left, r = right; rem -= r - l + 1; if(rem <= 0) break; } for(int val: ans) cout << val << " "; cout << endl; }