Пример #1
0
int main() {
#ifndef LOCAL
  ios_base::sync_with_stdio(false);cin.tie(NULL);
#define endl '\n'
#endif

  size_t m;
  string line;
  while (cin >> m >> line) {
    size_t i = 0;
    string ans;
    a = line;
    tree.n = line.size();
    memset(tree.t, -1, sizeof tree.t);
    tree.build(1, 0, line.size() - 1);

    set<char> seen;
    memset(choosed, 0, sizeof choosed);
    while (i < line.size()) {
      size_t to = min(line.size() - 1, i + m - 1);
      size_t best = tree.query(1, i, to);

      /*
         size_t best = to;
         for (int j = to; j >= int(i); --j) {
         if (line[j] < line[best])
         best = j;
         }*/

      ans.push_back(line[best]);
      seen.insert(line[best]);
      choosed[best] = true;
      i = best + 1;
      if (line.size() - best <= m) {
        break;
      }
    }
    char last = *(--seen.end());
    for (size_t i = 0; i < line.size(); ++i) {
      if (!choosed[i] && line[i] < last)
        ans.push_back(line[i]);
    }
    sort(ans.begin(), ans.end());
    cout << ans << endl;
  }

  return 0;
}