けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 329 B - Next (灰色, 200 点)

昔の ABC B 問題って感じ!

問題概要

長さ  N の数列  A_{1}, A_{2}, \dots, A_{N} が与えられる。すべての値が等しいわけではないことが保証される。

これらのうち、最大値でない中での最大値を求めよ。

解法

まず for 文を回すなどして、 N 個の値  A_{1}, A_{2}, \dots, A_{N} の最大値を求める。たとえばその値を maxv などとする。

次に、ふたたび for 文を回して、maxv 未満の値のみを取り出して最大値を求めればよい。

#include <bits/stdc++.h>
using namespace std;

int main() {
    int N;
    cin >> N;
    
    // N 個の入力値を受け取りながら最大値を求める
    vector<int> A(N);
    int maxv = 0;
    for (int i = 0; i < N; ++i) {
        cin >> A[i];
        maxv = max(maxv, A[i]);
    }
    
    // maxv 未満の中での最大値を求める
    int res = 0;
    for (int i = 0; i < N; ++i) {
        if (A[i] == maxv) continue;  // max はダメ
        res = max(res, A[i]);
    }
    cout << res << endl;
}