P11231 [CSP-S 2024] 决斗 题解

原题链接

这道题之前一直用的是贪心做的,看到一个非常巧妙的转化方法,故记之。

首先原题可以转化为找到最多数量的单调上升子序列。每个满足条件的序列都能经过操作只剩下一个数。

那么可以画出这样的图。

null (1)

由此可以直观地看出答案即为序列的众数。

代码:

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

const int N = 1e5 + 9;
int a[N];
int n, ans;

int main(){
    cin >> n;
    for(int i = 1; i <= n; i++){
        int x;  cin >> x;
        a[x]++;
    }
    for(int i = 1; i < N; i++)
        if(a[i] > ans) ans = a[i];
    cout << ans;
    return 0;
}

复杂度 \(O(n + W)\)\(W\) 为值域。

posted @ 2026-06-25 18:10  dairuize  阅读(2)  评论(0)    收藏  举报