思路
在间隔k之间找到一个与id相同的即可,可以联想到滑动窗口。对于开始的每个x入栈,对应的ID[x]++,然后在间隔k之后开始出栈,每次出栈后ID[x]--,若ID[x]不为0说明此时在k之内存在相同品种,更新最值。
#include<iostream>
#include<queue>
using namespace std;
const int N=1e6+10;
int ID[N];
int main(){
int n,k;
cin>>n>>k;
queue<int> q;
int res=0;
for(int i=1;i<=n;i++){
int x;
cin>>x;
if(i>k+1){
int hh=q.front();
q.pop();
ID[hh]--;
}
if(ID[x])res=max(res,x);
q.push(x);
ID[x]++;
}
res==0?cout<<-1:cout<<res;
return 0;
}