80分求助(#2 #10TLE了)

P1440 求m区间内的最小值

ho33 @ 2023-03-19 10:41:59

用的是单调队列,我感觉单调队列挺快的了....

#include<bits/stdc++.h>
using namespace std;
int n,m;
int arr[40000010];
class Mqueue{
 public:
  deque<int>que;
  void push(int val){
    while(!que.empty()&&que.back()>val){
      que.pop_back();
    }
    que.push_back(val);
  }
  void pop(int val){
    if(!que.empty()&&que.front()== val){
      que.pop_front();
    }
  }
  int front(){
    return que.front();
  }
};
int main(){
  cin>>n>>m;
  Mqueue que;
  vector<int>ans;
  for(int i = 1;i <= n;i++){
    cin>>arr[i];
  }
  cout<<'0'<<endl;
  for(int i = 2;i <= n;i++){
    if(i>m){
      que.pop(arr[i-1-m]);
    }
    que.push(arr[i-1]);
    ans.push_back(que.front());
  }
  for(int i = 0;i <ans.size();i++){
    cout<<ans[i]<<endl;
  }
}

by ho33 @ 2023-03-19 11:36:20

哦,改成scanf和printf就过了 此贴结


|