AT_abc348_c [ABC348C] Colorful Beans 题解
题目大意:
给定 \(n\) 个豆子,每个豆子有美味度 \(a_i\) 和颜色 \(c_i\),选择 \(1\) 种颜色的豆子吃 \(1\) 粒美味度最小的豆子,求所吃豆子美味度的最大值。
数据范围:\(1 \leq n \leq 2 \times 10^5,1 \leq a_i,c_i \leq 10^9\)。
题目分析:
对于求同种颜色豆子美味度的最小值,考虑开一个 map
或 unordered_map
等存储,记录所出现的颜色,再遍历每种颜色豆子美味度求最大值即可。
时间复杂度:\(O(n)\),含有较大常数。
Code:
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,c[N],ans;
unordered_map <int,int> mp;//习惯打unordered_map减少一下常数
signed main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int a;
scanf("%d%d",&a,&c[i]);
if(!mp[c[i]]) mp[c[i]]=a;//这里map初始为空,所以直赋值
else mp[c[i]]=min(mp[c[i]],a);//否则取最小值
}
for(int i=1;i<=n;i++)
ans=max(ans,mp[c[i]]);//遍历每种颜色的豆子的美味度
printf("%d",ans);
return 0;
}