思考アレイが表示されますの最大数
元の質問へのリンク:https://qduoj.com/problem/20
問題の意味
あなたの配列を与えるためには、表示される出力超えた\(1/2 \)の要素を。、唯一の解決策があることを確認してください。
入力:
最初の行は整数\(N-(N - <= 1E7)\) 、各ラインは整数後、コピーの数を示すデータです。
出力:
出力が複数表示されます(1/2 \)\その数のを。
ヒント:使用しないでください(\ CIN)\、大量のデータを、時間の複雑さはO(n)まで。
問題の解決策のアイデア
我々は、各デジタル入力した後、最初のスタックに、この問題を解決する最初の番号をスタックを使用し、トップ要素を比較し、同じスタックの要素ならば、それはスタックにプッシュすることができ、上の人かでき私たちは、スタックからも最上位要素をスタックにプッシュし、することはできません。スタックを比較する処理が空である場合、直接要素には、スタックにプッシュすることができ、その後、それは比較になりません。
ここでは使用することができます\(STL \)非常に簡潔にするためのテンプレートを。
コードの実装
#include<cstdio>
#include<stack>
using namespace std;
typedef long long ll;
stack<int> a;
int main()
{
int n, tmp;
scanf("%d%d",&n, &tmp);
a.push(tmp);
for(int i=2; i<=n; i++){
scanf("%d", &tmp);
if(!a.empty())
if(tmp!=a.top())
a.pop();
else a.push(tmp);
else a.push(tmp);
}
printf("%d\n", a.top());
return 0;
}