题解:P11551 [ROIR 2016 Day 1] 奖品

orpg

2025-01-10 14:20:14

Solution

简化题意

其实本题就是求 2\le i\le n 的次大值。

那么就会有两种情况:

  1. 当前值比最大值大,那么将原最大值赋给次大值并输出。
  2. 当前值比次大值大,更新次大值并输出。

    code

#include<bits/stdc++.h>
using namespace std;
int n;
const int maxn=1e5+5;
int a[maxn];
int ma,ans;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++){
        if(ma<=a[i]){
            ans=ma;ma=a[i];
        }
        else if(a[i]>ans){
            ans=a[i];
        } 
        if(i>=2) cout<<ans<<" ";
    }
    return 0;
}