60分tle
查看原帖
60分tle
1189340
aishiteru_mitsu_ha楼主2025/7/24 17:04
#include<bits/stdc++.h>
#define endl "\n"
#define ll long long
#define N 1000086
using namespace std;
struct node{
    int id,num;
};
int n,k,a[N],minn[N],maxx[N];
list<node> l1,l2;
inline int read();
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    
    n=read(),k=read();
    for(int i=1;i<=n-k+1;i++) minn[i]=(1<<31)-1;
    for(int i=1;i<=n-k+1;i++) maxx[i]=-(1<<31);
    for(int i=1;i<=n;i++){
        a[i]=read();
    }
    for(int i=1;i<=n-k+1;i++){
        while(!l1.empty() && l1.front().id<i) l1.pop_front();
        for(int j=i;j<=i+k-1;j++){
            while(!l1.empty() && l1.back().num>a[j]) l1.pop_back();
            l1.push_back((node){i,a[j]});
        }
        minn[i]=min(minn[i],l1.front().num);
    }
    for(int i=1;i<=n-k+1;i++){
        while(!l2.empty() && l2.front().id<i) l2.pop_front();
        for(int j=i;j<=i+k-1;j++){
            while(!l2.empty() && l2.back().num<a[j]) l2.pop_back();
            l2.push_back((node){i,a[j]});
        }
        maxx[i]=max(maxx[i],l2.front().num);
    }
    for(int i=1;i<=n-k+1;i++){
        cout<<minn[i]<<" ";
    }
    cout<<endl;
    for(int i=1;i<=n-k+1;i++){
        cout<<maxx[i]<<" ";
    }
    cout<<endl;
    return 0;
}
inline int read(){
    int x=0,f=1;char ch=getchar();
    while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();}
    while (ch>='0'&&ch<='9') {x=x*10+ch-48;ch=getchar();}
    return x*f;
}
2025/7/24 17:04
加载中...