【每日一题】3月30

滑动窗口

http://www.nowcoder.com/questionTerminal/b4d345a65640432db06ac978ccb6e23a

单调队列经典模板题。详细可以看代码。

#include<bits/stdc++.h>

#define fi first
#define se second
#define U unsigned
#define P std::pair<int,int>
#define LL long long
#define pb push_back
#define MP std::make_pair
#define all(x) x.begin(),x.end()
#define CLR(i,a) memset(i,a,sizeof(i))
#define FOR(i,a,b) for(int i = a;i <= b;++i)
#define ROF(i,a,b) for(int i = a;i >= b;--i)
#define DEBUG(x) std::cerr << #x << '=' << x << std::endl

const int MAXN = 1e6 + 5;
std::deque<int> q[2];// max,min
int n,k;
int a[MAXN];

int A1[MAXN],A2[MAXN];
int main(){
    scanf("%d%d",&n,&k);
    FOR(i,1,n) scanf("%d",a+i);
    FOR(i,1,n){
        while(!q[0].empty() && a[q[0].back()] < a[i]) q[0].pop_back();q[0].pb(i);
        while(!q[0].empty() && q[0].front() < i-k+1) q[0].pop_front();
        if(i >= k) A2[i] = a[q[0].front()];
        while(!q[1].empty() && a[q[1].back()] > a[i]) q[1].pop_back();q[1].pb(i);
        while(!q[1].empty() && q[1].front() < i-k+1) q[1].pop_front();
        if(i >= k) A1[i] = a[q[1].front()];
    }
    FOR(i,k,n) printf("%d ",A1[i]);puts("");
    FOR(i,k,n) printf("%d ",A2[i]);puts("");
    return 0;
}
全部评论

相关推荐

01-15 17:34
保定学院 Java
数学转码崽:学历没优势就得卷项目和实习啊,但是我看了一下你这个项目,什么雪花算法,搜索引擎,Docker,minio这些都属于通用的东西啊,根本不算亮点,没有任何业务相关性。 还有第二个看到统一鉴权,分片上传估计面试官都不想看了。连我一个偶尔刷刷牛客简历的都看多了,面试官估计早都看吐了。。。 秋招结束了,就尽量找找中小厂吧,毕竟你现在转行已经没时间了,高低有一段实习经历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务