
看到题目我们可以从题目中获取部分关键信息,首先它时要求给定的区域时最小的,其次又是区间最优,通过最优我们可以想到单调性,切记:我们这里的单调条件就是:名画种类递增!
废话不多说,贴上代码:
#include <iostream>
#include <deque>
using namespace std;
const int N = 1e6+100;
const int M = 2010;
int b[N],cnt,a[N],m,n,ansl = 1e8,ansr = 1e8,ans = 1e8;
deque<int> q;
int main()
{
ios::sync_with_stdio(false);
cin >> n >> m;
for(int i = 1; i <= n; i ++ )
cin >> a[i];
for(int i = 1; i <= n; i ++ )
{
if(! b[a[i]])
cnt ++ ;
q.push_back(i);
b[a[i]] ++ ;
while(b[a[q.front()]] >= 2)
{
b[a[q.front()]] -- ;
q.pop_front();
}
if(cnt >= m && q.back() - q.front() + 1 < ans )
{

本文探讨如何利用双端队列(deque)实现单调队列,以解决要求区间内最小值且保证效率的问题。强调在处理大数据规模(如N<1e6)时,需要考虑O(nlogn)或更低复杂度的算法,提示在这样的情况下应考虑借助数据结构优化算法。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



