Language: C++

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <cctype>
 
#include <algorithm>
#include <tuple>
#include <random>
#include <bitset>
#include <queue>
#include <functional>
#include <set>
#include <map>
#include <vector>
#include <chrono>
#include <iostream>
#include <limits>
#include <numeric>

#define LOG(FMT...) fprintf(stderr, FMT)

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;

// mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

template <class T>
istream& operator>>(istream& is, vector<T>& v) {
  for (T& x : v)
    is >> x;
  return is;
}

ostream& operator<<(ostream& os, const pair<char, int>& unit) {
  return os << unit.first << "^" << unit.second;
}

template <class T>
ostream& operator<<(ostream& os, const vector<T>& v) {
  if (!v.empty()) {
    os << v.front();
    for (int i = 1; i < v.size(); ++i)
      os << ' ' << v[i];
  }
  return os;
}

string naive(string ba) {
  string ret = ba;
  while (!ba.empty()) {
    ba.erase(0, 1);
    ba.erase(ba.find_first_of('a'), 1);
    ret = max(ret, ba);
  }
  return ret;
}

int main() {
#ifdef LBT
  freopen("test.in", "r", stdin);
  int nol_cl = clock();
#endif
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  
  int n;
  string s;
  cin >> n >> s;
  vector<int> pre(n * 2);
  int cur = 0;
  for (int i = 0; i < n * 2; ++i) {
    if (s[i] == 'a') ++cur;
    else --cur;
    pre[i] = cur;
  }
  string ans;
  vector<string> stk;
  int last = 0;
  for (int i = 0; i < n * 2; i += 2) {
    if (pre[i] < 0) {
      int r = find(pre.begin() + i, pre.end(), 0) - pre.begin();
      last = r + 1;
      string res = naive(string(s.begin() + i, s.begin() + last));
      while (!stk.empty()) {
        if (stk.back().size() > res && res > stk.back())
          stk.pop_back();
        else if (res.substr(0, res.size()) > stk.back())
          stk.pop_back();
        else
          break;
      }
      stk.push_back(res);
      i = r - 1;
    }
  }
  for (const auto& str : stk)
    ans += str;
  bool f = false;
  for (int i = last; i < n * 2; ++i) {
    if (s[i] == 'a' && !f) {
      f = true;
      ans.push_back('a');
    } else if (s[i] == 'b' && f) {
      f = false;
      ans.push_back('b');
    }
  }
  cout << ans;

#ifdef LBT
  LOG("Time: %dms\n", int ((clock()
          -nol_cl) / (double)CLOCKS_PER_SEC * 1000));
#endif
  return 0;
}



Compiler output:
a.cc: In function 'int main()':
a.cc:90:31: error: no match for 'operator>' (operand types are 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'std::string' {aka 'std::__cxx11::basic_string<char>'})
   90 |         if (stk.back().size() > res && res > stk.back())
      |             ~~~~~~~~~~~~~~~~~ ^ ~~~
      |                            |    |
      |                            |    std::string {aka std::__cxx11::basic_string<char>}
      |                            std::__cxx11::basic_string<char>::size_type {aka long unsigned int}
In file included from /usr/include/c++/14/bits/stl_algobase.h:64,
                 from /usr/include/c++/14/bits/specfun.h:43,
                 from /usr/include/c++/14/cmath:3906,
                 from a.cc:4:
/usr/include/c++/14/bits/stl_pair.h:1058:5: note: candidate: 'template<class _T1, class _T2> constexpr bool std::operator>(const pair<_T1, _T2>&, const pair<_T1, _T2>&)'
 1058 |     operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_pair.h:1058:5: note:   template argument deduction/substitution failed:
a.cc:90:33: note:   mismatched types 'const std::pair<_T1, _T2>' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'}
   90 |         if (stk.back().size() > res && res > stk.back())
      |                                 ^~~
In file included from /usr/include/c++/14/bits/stl_algobase.h:67:
/usr/include/c++/14/bits/stl_iterator.h:462:5: note: candidate: 'template<class _Iterator> constexpr bool std::operator>(const reverse_iterator<_Iterator>&, const reverse_iterator<_Iterator>&)'
  462 |     operator>(const reverse_iterator<_Iterator>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:462:5: note:   template argument deduction/substitution failed:
a.cc:90:33: note:   mismatched types 'const std::reverse_iterator<_Iterator>' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'}
   90 |         if (stk.back().size() > res && res > stk.back())
      |                                 ^~~
/usr/include/c++/14/bits/stl_iterator.h:507:5: note: candidate: 'template<class _IteratorL, class _IteratorR> constexpr bool std::operator>(const reverse_iterator<_Iterator>&, const reverse_iterator<_IteratorR>&)'
  507 |     operator>(const reverse_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:507:5: note:   template argument deduction/substitution failed:
a.cc:90:33: note:   mismatched types 'const std::reverse_iterator<_Iterator>' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'}
   90 |         if (stk.back().size() > res && res > stk.back())
      |                                 ^~~
/usr/include/c++/14/bits/stl_iterator.h:1714:5: note: candidate: 'template<class _IteratorL, class _IteratorR> constexpr bool std::operator>(const move_iterator<_IteratorL>&, const move_iterator<_IteratorR>&)'
 1714 |     operator>(const move_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:1714:5: note:   template argument deduction/substitution failed:
a.cc:90:33: note:   mismatched types 'const std::move_iterator<_IteratorL>' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'}
   90 |         if (stk.back().size() > res && res > stk.back())
      |                                 ^~~
/usr/include/c++/14/bits/stl_iterator.h:1774:5: note: candidate: 'template<class _Iterator> constexpr bool std::operator>(const move_iterator<_IteratorL>&, const move_iterator<_IteratorL>&)'
 1774 |     operator>(const move_iterator<_Iterator>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:1774:5: note:   template argument deduction/substitution failed:
a.cc:90:33: note:   mismatched types 'const std::move_iterator<_IteratorL>' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'}
   90 |         if (stk.back().size() > res && res > stk.back())
      |                                 ^~~
In file included from a.cc:9:
/usr/include/c++/14/tuple:2619:5: note: candidate: 'template<class ... _TElements, class ... _UElements> constexpr bool std::operator>(const tuple<_UTypes ...>&, const tuple<_Elements ...>&)'
 2619 |     operator>(const tuple<_TElements...>& __t,
      |     ^~~~~~~~
/usr/include/c++/14/tuple:2619:5: note:   template argument deduction/substitution failed:
a.cc:90:33: note:   mismatched types 'const std::tuple<_UTypes ...>' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'}
   90 |         if (stk.back().size() > res && res > stk.back())
      |                                 ^~~
In file included from /usr/include/c++/14/bits/basic_string.h:47,
                 from /usr/include/c++/14/string:54,
                 from /usr/include/c++/14/random:43,
                 from a.cc:10:
/usr/include/c++/14/string_view:695:5: note: candidate: 'template<class _CharT, class _Traits> constexpr bool std::operator>(basic_string_view<_CharT, _Traits>, basic_string_view<_CharT, _Traits>)'
  695 |     operator> (basic_string_view<_CharT, _Traits> __x,
      |     ^~~~~~~~
/usr/include/c++/14/string_view:695:5: note:   template argument deduction/substitution failed:
a.cc:90:33: note:   mismatched types 'std::basic_string_view<_CharT, _Traits>' and 'long unsigned int'
   90 |         if (stk.back().size() > res && res > stk.back())
      |                                 ^~~
/usr/include/c++/14/string_view:702:5: note: candidate: 'template<class _CharT, class _Traits> constexpr bool std::operator>(basic_string_view<_CharT, _Traits>, __type_identity_t<basic_string_view<_CharT, _Traits> >)'
  702 |     operator> (basic_string_view<_CharT, _Traits> __x,
      |     ^~~~~~~~
/usr/include/c++/14/string_view:702:5: note:   template argument deduction/substitution failed:
a.cc:90:33: note:   mismatched types 'std::basic_string_view<_CharT, _Traits>' and 'long unsigned int'
   90 |         if (stk.back().size() > res && res > stk.back())
      |                                 ^~~
/usr/include/c++/14/string_view:710:5: note: candidate: 'template<class _CharT, class _Traits> constexpr bool std::operator>(__type_identity_t<basic_string_view<_CharT, _Traits> >, basic_string_view<_CharT, _Traits>)'
  710 |     operator> (__type_identity_t<basic_string_view<_CharT, _Traits>> __x,
      |     ^~~~~~~~
/usr/include/c++/14/string_view:710:5: note:   template argument deduction/substitution failed:
a.cc:90:33: note:   'std::__cxx11::basic_string<char>' is not derived from 'std::basic_string_view<_CharT, _Traits>'
   90 |         if (stk.back().size() > res && res > stk.back())
      |                                 ^~~
/usr/include/c++/14/bits/basic_string.h:3915:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> bool std::operator>(const __cxx11::basic_string<_CharT, _Traits, _Allocator>&, const __cxx11::basic_string<_CharT, _Traits, _Allocator>&)'
 3915 |     operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14/bits/basic_string.h:3915:5: note:   template argument deduction/substitution failed:
a.cc:90:33: note:   mismatched types 'const std::__cxx11::basic_string<_CharT, _Traits, _Allocator>' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'}
   90 |         if (stk.back().size() > res && res > stk.back())
      |                                 ^~~
/usr/include/c++/14/bits/basic_string.h:3929:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> bool std::operator>(const __cxx11::basic_string<_CharT, _Traits, _Allocator>&, const _CharT*)'
 3929 |     operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14/bits/basic_string.h:3929:5: note:   template argument deduction/substitution failed:
a.cc:90:33: note:   mismatched types 'const std::__cxx11::basic_string<_CharT, _Traits, _Allocator>' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'}
   90 |         if (stk.back().size() > res && res > stk.back())
      |                                 ^~~
/usr/include/c++/14/bits/basic_string.h:3942:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> bool std::operator>(const _CharT*, const __cxx11::basic_string<_CharT, _Traits, _Allocator>&)'
 3942 |     operator>(const _CharT* __lhs,
      |     ^~~~~~~~
/usr/include/c++/14/bits/basic_string.h:3942:5: note:   template argument deduction/substitution failed:
a.cc:90:33: note:   mismatched types 'const _CharT*' and 'long unsigned int'
   90 |         if (stk.back().size() > res && res > stk.back())
      |                                 ^~~
In file included from /usr/include/c++/14/vector:66,
                 from /usr/include/c++/14/bits/random.h:34,
                 from /usr/include/c++/14/random:48:
/usr/include/c++/14/bits/stl_vector.h:2102:5: note: candidate: 'template<class _Tp, class _Alloc> bool std::operator>(const vector<_Tp, _Alloc>&, const vector<_Tp, _Alloc>&)'
 2102 |     operator>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_vector.h:2102:5: note:   template argument deduction/substitution failed:
a.cc:90:33: note:   mismatched types 'const std::vector<_Tp, _Alloc>' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'}
   90 |         if (stk.back().size() > res && res > stk.back())
      |                                 ^~~
In file included from /usr/include/c++/14/deque:66,
                 from /usr/include/c++/14/queue:62,
                 from a.cc:12:
/usr/include/c++/14/bits/stl_deque.h:2349:5: note: candidate: 'template<class _Tp, class _Alloc> bool std::operator>(const deque<_Tp, _Alloc>&, const deque<_Tp, _Alloc>&)'
 2349 |     operator>(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y)
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_deque.h:2349:5: note:   template argument deduction/substitution failed:
a.cc:90:33: note:   mismatched types 'const std::deque<_Tp, _Alloc>' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'}
   90 |