54分求助!
  • 板块P1638 逛画展
  • 楼主messikb
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/1/18 19:13
  • 上次更新2024/1/18 21:25:39
查看原帖
54分求助!
899100
messikb楼主2024/1/18 19:13
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long ll;
const int N = 1e6 + 5,M=2e3+5;
ll n, m;
int a[N],b[M];//b下表代表画家编号,内容代表他的画的位置。a下标表示位置,内容代表画家
int jisuan() {
	int fl = 1e6,k=0;
	for (int i = 1; i <= m; ++i) {
		if (fl > b[i]) {
			fl = b[i];
			k = i;
		}
	}
	return k;
}
int main() {
	int flag = 0,left=1,right=0;
	cin >> n >> m;
	for (int i = 1; i <= n; ++i) {
		scanf("%d", &a[i]);
	}
	for (int i = 1; i <= n; ++i) {
		if (flag != m) {
			if (b[a[i]] == 0) {
				b[a[i]] = i;
				right = i;
				flag++;
			}
			else {
				b[a[i]] = i;
				right = i;
				left= b[jisuan()];
			}
		}
		if(flag==m) {
			int ans = b[a[i]];
			b[a[i]] = i;
			int l = jisuan();
			if (i - b[l] < right - left) {
				right = i;
				left = b[l];
			}
			else {
				b[a[i]] = ans;
			}
		}
	}
	cout << left << " " << right;
	return 0;
}
2024/1/18 19:13
加载中...