欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

洛谷:P1440 求m区间内的最小值(普及/提高-,滑动窗口)

程序员文章站 2022-03-21 21:21:37
...

题目:

洛谷:P1440 求m区间内的最小值(普及/提高-,滑动窗口)

代码:3个点超时,懵逼:

#include<bits/stdc++.h>
using namespace std;
int m,n;
int A[2000005];
int main()
{
 cout<<0<<endl;
 cin>>m>>n; 
 deque<int> dq;
 cin>>A[0];
 cout<<A[0]<<endl;
 dq.push_back(0);
 //形成最初窗口 
 for(int i=1;i<n;i++)
 {
  scanf("%d",&A[i]);
  //倒着找比该元素小的,都弹出 
  while(!dq.empty())
  {
   if(A[dq.back()]>=A[i]) dq.pop_back();
   else break;
  }
  dq.push_back(i);
  cout<<A[dq.front()]<<endl;
 }
 //cout<<A[dq[0]]<<endl;
 for(int i=n;i<m-1;i++)
 {
  scanf("%d",&A[i]);
  //倒着找比该元素小的,都弹出 
  while(!dq.empty())
  {
   if(A[dq.back()]>=A[i]) dq.pop_back();
   else break;
  }
  dq.push_back(i);
  //第一个是否已出
  if(dq.front()<i-n+1) dq.pop_front();
  cout<<A[dq[0]]<<endl;
 }
}

题解差不多:

题解:

1.不存下标,创了个结构体里面放了下标和值。

2.压缩了循环和判断条件,代码简洁了很多。

洛谷:P1440 求m区间内的最小值(普及/提高-,滑动窗口)

但我的超时感到懵逼。

相关标签: 滑动窗口