思考アレイが表示されますの最大数

思考アレイが表示されますの最大数

元の質問へのリンク: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; 
}

おすすめ

転載: www.cnblogs.com/alking1001/p/11963940.html