90分 单调队列 tle求助
查看原帖
90分 单调队列 tle求助
574613
oval_m楼主2022/2/17 15:22

不吸氧 #2TLE

#include<iostream>
#include<queue>
using namespace std;
int arr[1000005],n,k;
struct cmp1{bool operator () (const int &a,const int &b){return arr[a]>arr[b];}};
struct cmp2{bool operator () (const int &a,const int &b){return arr[a]<arr[b];}};
priority_queue<int,vector<int>,cmp1> qmin;
priority_queue<int,vector<int>,cmp2> qmax;
int ansmin[1000005],ansmax[1000005];
int main()
{
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    cin>>n>>k;
    for(int i=0;i<n;i++)cin>>arr[i];
    for(int i=0;i<k-1;i++){qmin.push(i);qmax.push(i);}
    for(int i=0;i<n-k+1;i++)
    {
        qmin.push(i+k-1);
        qmax.push(i+k-1);
        while(qmin.top()<i)qmin.pop();
        while(qmax.top()<i)qmax.pop();
        ansmin[i]=arr[qmin.top()];
        ansmax[i]=arr[qmax.top()];
    }
    for(int i=0;i<n-k+1;i++)cout<<ansmin[i]<<' ';
    cout<<endl;
    for(int i=0;i<n-k+1;i++)cout<<ansmax[i]<<' ';
}
2022/2/17 15:22
加载中...