最快解法-区间滑动
2024-09-25 20:08:33
发布于:上海
11阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1000005;
int ra, rb, n, m, ans, l, r, pt[MAXN];
int swaping(int length){//判读长度为length的是否能包含所有m个画家的作品
int pt1[2005] = {0};
int count1 = 0;
for(int i = 1; i <= length; i++){
pt1[pt[i]] ++;
if(pt1[pt[i]] == 1)
count1 ++;
}
if(count1 == m){
ra = 1;
rb = length;
return true;
}
for(int i = 2; i <= n - length; i++){
pt1[pt[i - 1]] --;
if(pt1[pt[i - 1]] == 0)
count1 --;
pt1[pt[i + length - 1]] ++;
if(pt1[pt[i + length - 1]] == 1)
count1 ++;
if(count1 == m){
ra = i;
rb = i + length - 1;
return true;
}
}
return false;
}
int main(){
cin >> n >> m;
for(int i = 1; i <= n; i++){
cin >> pt[i];
}
l = 1;
r = n + 1;
while(l < r){
int mid = (l + r) / 2;
if(swaping(mid)){
r = mid;
}else{
l = mid + 1;
}
}
cout << ra << " " << rb;
}
这里空空如也
有帮助,赞一个