专栏文章

题解:CF1257C Dominated Subarray

CF1257C题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@mip232ys
此快照首次捕获于
2025/12/03 04:54
3 个月前
此快照最后确认于
2025/12/03 04:54
3 个月前
查看原文
这是一道贪心的题目。
实际上有可能最短的子序列就是开头和结尾是同一个数,中间都是不同的数字。我们维护整个数列中每个数字 aia_i 上一次出现的位置 lxl_x,则答案为 min{ilai+1}\min\{i-l_{a_i}+1\},如果没有这样的值输出 1-1 即可。
CPP
#include<bits/stdc++.h>
using namespace std;

unordered_map<int, int> l;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);

	int T;
	cin >> T;
	
	while (T--) {
		int n;
		cin >> n;
		
		int ans = INT_MAX;
        l.clear();
		for (int i = 1; i <= n; i++) {
			int x;
			cin >> x;
			if (l.count(x)) ans = min(ans, i - l[x] + 1);
			l[x] = i;
		}
		cout << (ans == INT_MAX ? -1 : ans) << '\n';
	}
	return 0;
}

评论

1 条评论,欢迎与作者交流。

正在加载评论...