私の問題は、要素を挿入し、最後に挿入された要素をポップし、指定されたものにmaxを出力することです。私は目的のために2つのスタックを使用しており、利用可能な多くの提案テクニックに基づいて最適化されています。しかし、クエリの数がq< = 100000、テストケースが< = 100の場合には、さらに最適化が必要です。以下は、今のように私のコードです:スタック内の最大値を見つける最適化
int main() {
int t,q;
cin>>t;
char query;
int detail;
for(int test=0;test<t;test++)
{
cout<<"Case "<<test+1<<":\n";
cin>>q;
stack<int> s;
stack<int> max;
for(int i=0;i<q;i++)
{
cin>>query;
if(query=='A')
{
cin>>detail;
s.push(detail);
if(max.empty())
max.push(detail);
else if(detail>=max.top())
max.push(detail);
}
else if(query=='R')
{
if(!s.empty())
{
if(s.top()==max.top())
max.pop();
s.pop();
}
}
else
{
if(max.empty())
cout<<"Empty\n";
else
cout<<max.top()<<"\n";
}
}
}
return 0;
}
'stack 2つではなく' stack > 'を使うことを検討してください。この場合、おそらくキャッシュの局所性が向上します –
alexeykuzmin0
@ Jarod42わかりません。あなたはそれらの要素を挿入していますか?どのような操作をしていますか?なぜそれは動作しないと思いますか? – Bharg
以下の '4 A 1 A 1 R Q'の入力では' 'Empty ''を表示し、 's'には' 1'が残っています。次の 'R'を追加すると悪いことが起こります。 [デモ](https://ideone.com/2BrQUt) – Jarod42