zoukankan      html  css  js  c++  java
  • 滑动最小值

    问题 B: 滑动最小值

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 127  解决: 27
    [提交] [状态] [讨论版] [命题人:admin]

    题目描述

    给定一个长度为 n 的数列 a0,a1,,⋯,an−1和一个整数k。求数列 bi=min(ai,ai+1 ,⋯,ai+k−1)(i∈[0,n))。

    特别的,对于 i>n−k 的 bi=0。

    输入

    第一行两个正整数n,k。
    第二行n个正整数a。

    输出

    n个数b。

    样例输入

    5 2
    1 2 3 4 5
    

    样例输出

    1 2 3 4 0
    

    提示

    对于100%的数据,n≤1000000。

    #include<bits/stdc++.h>
    #define REP(i, a, b) for(int i = (a); i <= (b); ++ i)
    #define REP(j, a, b) for(int j = (a); j <= (b); ++ j)
    #define PER(i, a, b) for(int i = (a); i >= (b); -- i)
    #define REP(i, a, b) for(int k = (a); k <= (b); ++ k)
    using namespace std;
    template <class T>
    inline void rd(T &ret){
        char c;
        ret = 0;
        while ((c = getchar()) < '0' || c > '9');
        while (c >= '0' && c <= '9'){
            ret = ret * 10 + (c - '0'), c = getchar();
        }
    }
    const int maxn=1e2+6;
    int n,a[maxn],k,b[maxn];
    int p[maxn];
    int main(){
        rd(n),rd(k);
        for(int i=0;i<n;i++)rd(a[i]);
        int head=0, tail=0;
        for(int i=0;i<n;i++) {
            while(head<tail && a[p[tail-1]]>=a[i]) tail--;
                p[tail++]=i;
                if(i-k+1>=0) {
                    b[i-k+1]=a[p[head]];
                    if(p[head]==i-k+1) head++;
                }
        }
        for(int i=0;i<n;i++)printf("%d ",b[i]);
    }
  • 相关阅读:
    R中的一些数据形式
    R数据处理
    矩阵的一些知识
    R语言的一些矩阵运算
    R语言中的常用函数
    R读取数据和导出数据
    贝叶斯公式的理解方式
    R语言中bioconductor包
    R语言中的数据结构
    网页版的R设置环境变量
  • 原文地址:https://www.cnblogs.com/czy-power/p/10463066.html
Copyright © 2011-2022 走看看