牛牛在衣柜里拿出了他的袜子,他把这些袜子摆成一排,一共有只袜子,袜子总共有种颜色,颜色编号从到。
现在牛妹想要牛牛找到最小的整数,使得有一种颜色的袜子出现在任意连续的个袜子中。如果有多种颜色,牛妹希望找到编号最小的那种颜色。
第一行两个数字和表示袜子的个数和颜色的个数。第二行有个数字,第个数字表示第个袜子的颜色是。
一行两个数字表示答案。第一个数字为最小的长度,第二个数字为颜色编号最小的编号。
2 2 1 2
2 1
4 2 1 2 1 2
2 1
当时,满足的区间只有一个,此时同时出现在这些区间里面的袜子颜色为和。
当时,满足的区间为和,此时同时出现在这些区间里面的袜子颜色为和。
当时,满足的区间为、和,此时同时出现在这些区间里面的袜子颜色为和。
当时,满足的区间为、、和,此时没有同时出现在这些区间里面的袜子颜色。
#include <bits/stdc++.h> using namespace std; int f[1000005], g[1000005]; set<int>s; int main(){ int n, m, x = 1e9; cin >> n >> m; s.clear(); memset(f, -1, sizeof(f)); memset(g, 0, sizeof(g)); for(int i = 0; i < n; i++){ int c; cin >> c; g[c] = max(g[c], i - f[c]); f[c] = i; s.insert(c); } for(auto it : s){ g[it] = max(g[it], n - f[it]); } int ans = 0; for(auto it : s){ if(x > g[it]){ x = g[it]; ans = it; } } cout << x << ' ' << ans << endl; }