acwing1969

思路

在间隔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;
}