[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;
}