[ABC329D] Election Quick Report 题解

题意

每次输入一个数 $i$,在对应的 $a_i$ 上使其值加一,每次修改然后输出字典序最小的最大值。

思路

设当前最大值的编号为 $ans$,每次修改 $a_i$ 之后,如果 $a_i > a_{ans}$ 那么 $i$ 就是现在最大的。如果 $a_i = a_{ans}$,如果 $i$ 的字典序更小,则 $ans$ 更新为 $i$。

时间复杂度:$O(m)$。

Code

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

const int N = 2e5 + 10;
int n, m;
int a[N], tot[N], maxn, id;
//tot 统计次数, maxn 为最大值, id为最大值的编号

signed main(){
    cin >> n >> m;
    for (int i = 1; i <= m; i ++) {
        cin >> a[i];
        tot[a[i]] ++;
        if(tot[a[i]] > maxn) {
            maxn = tot[a[i]], id = a[i];
        }else if(tot[a[i]] == maxn && a[i] < id){
            id = a[i];
        }
        cout << id << endl;
    }
    return 0;
}
posted @ 2023-11-19 09:27  固态H2O  阅读(5)  评论(0编辑  收藏  举报  来源