本文主要是介绍P1638 逛画展 双指针,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
P1638 逛画展 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
思路:双指针。固定右端点,移动左端点。如果左端点对应的值在左右范围内存在一个以上,左端点就向右进行移动,同时消除右端点对整个范围的影响。
void solve() {int n,m; cin>>n>>m;vector<int> a(n + 1), b(n + 1);for(int i = 1; i <= n; ++i) cin>>a[i];int mi = INF, l = 0, r = 0;int cnt = 0;for(int i = 1, j = 1; i <= n; ++i) {if(b[a[i]] == 0) cnt++; b[a[i]]++;while(b[a[j]] > 1) {b[a[j]]--;++j;}if(cnt == m && i - j + 1 < mi) mi = i - j + 1, l = j, r = i;}cout<<l<<" "<<r;
}
这篇关于P1638 逛画展 双指针的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!