#include <bits/stdc++.h>
#define FIN ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define SZ(s) int(s.size())
using namespace std;
typedef long long ll;
int main()
{
FIN;
set<ll>s;
ll N, M;
cin >> N >> M;
ll x;
for(ll i = 0; i < N+M; i++)
{
cin >> x;
if(x==-1)
{
auto x = *s.rbegin();
cout<<x<<'\n';
//-------------------------------------------------------------------------------------------------
s.erase( --s.end() ); // --s.end() when replaced with s.rbegin(), gives an error
//------------------------------------------------------------------------------------------------
}
else
{
s.insert( x );
}
}
}
水平線の間のコードで、セットから最後の要素を消去しようとしています。
s.erase( --s.end( ) ) の代わりにs.erase( s.rbegin( ) )を書くと、次のようなコンパイル エラーが表示されます。
**error: no matching function for call to ‘std::set<long long int>::erase(std::set<long long int>::reverse_iterator)’
20 | s.erase( s.rbegin() );**
s.rbegin() と --s.end() が同じ要素を指していませんか?