zoukankan      html  css  js  c++  java
  • POJ_2823 Sliding Window(单调队列)

      很裸的单调队列问题,不过O(n)的算法写出来5188+ms,超5s了。。。谁能告诉我500+ms的神级代码是什么。。.T_T


    My Code:

    #include <iostream>
    #include <cstdio>
    #include <cstring>

    using namespace std;

    const int N = 1000005;

    struct node {
    int i;
    int num;
    }q[N];

    int ans[N];
    int b[N];

    int main() {
    //freopen("data.in", "r", stdin);

    int n, k, i, f, r;
    while(~scanf("%d%d", &n, &k)) {
    getchar();
    for(i = 0; i < n; i++)
    scanf("%d", &b[i]);

    for(f = r = i = 0; i < n; i++) {

    if(f < r && q[f].i <= i - k) f++;
    while(f < r && q[r-1].num >= b[i]) r--;

    q[r].i = i; q[r].num = b[i]; r++;

    ans[i] = q[f].num;
    }

    for(i = k-1; i < n; i++) {
    printf("%d", ans[i]);
    if(i != n-1) putchar('');
    else putchar('\n');
    }

    for(f = r = i = 0; i < n; i++) {

    if(f < r && q[f].i <= i - k) f++;
    while(f < r && q[r-1].num <= b[i]) r--;

    q[r].i = i; q[r].num = b[i]; r++;

    ans[i] = q[f].num;
    }

    for(i = k-1; i < n; i++) {
    printf("%d", ans[i]);
    if(i != n-1) putchar('');
    else putchar('\n');
    }
    }
    return 0;
    }



  • 相关阅读:
    c++ builder 获取命令行参数
    c++ builder 只允许程序运行一个实例
    jQuery学习笔记(三)
    jQuery学习笔记(二)
    jQuery实现一个弹出登陆层的效果
    jQuery学习笔记(一)
    20117月
    201112学习
    21125
    211211
  • 原文地址:https://www.cnblogs.com/vongang/p/2256427.html
Copyright © 2011-2022 走看看