求调
查看原帖
求调
1251525
wisdom2010楼主2025/2/5 20:42
#include<bits/stdc++.h>
using namespace std;
int n, m;
const int maxn = 1e5 + 10;
const int maxm = 2e3 + 10;
int a[maxn];//愿序列
int flag[maxm] = {0};//教师出现次数
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m;
	for(int i = 1; i <= n; i++)
		cin >> a[i];
	int l = 1, r = 1;
	int s, t;
	int len = INT_MAX;//序列长度
	int teacher_num = 0;//教师种类
	while(r <= n)
	{
		int teacherr = a[r];//右端点教师
		if(flag[teacherr] == 0)
			teacher_num ++;
		flag[teacherr] ++;
		while(teacher_num == m)
		{
			int lenth = r - l + 1;//当前序列长度
			if(lenth < len)
			{
				len = lenth;
				s = l;
				t = r;
			}
			int teacherl = a[l];
			flag[teacherl]--;
			if(flag[teacherl] == 0)
				teacher_num--;
			l++;
		}
		r++;
	}
	cout << s << " " << t;
	return 0;
}
2025/2/5 20:42
加载中...