zoukankan      html  css  js  c++  java
  • 「题解」洛谷 P3512 [POI2010]PIL-Pilots

    题目

    P3512 [POI2010]PIL-Pilots

    简化题意

    问你一段序列中最长的最大值与最小值的差不超过一定值的子序列的长度

    思路

    单调队列。

    分别维护最大值和最小值以及下标。

    当最大值与最小值的差不在限制内就弹出队首。

    在限制内就就更新答案(需要用到上次弹出的数的下标)。

    Code

    #include <cstdio>
    #include <cstring>
    #include <string>
    #include <iostream>
    #include <algorithm>
    #define MAXN 3000001
    
    int max(int a, int b) { return a > b ? a : b; }
    
    int n, k, ans, last;
    struct Node {
        int w, id;
    };
    struct deque {
        Node a[MAXN];
        int head, tail;
        Node front() { return a[head]; }
        Node back() { return a[tail]; }
        void add(int x, int id) { a[++tail].w = x, a[tail].id = id; }
        void del_back() { --tail; }
        void del_front() { ++head; }
        bool empty() { return tail < head; }
    }q1, q2;
    
    int main() {
        scanf("%d %d", &k, &n);
        q1.tail = q2.tail = 0, q1.head = q2.head = 1;
        for (int i = 1, x; i <= n; ++i) {
            scanf("%d", &x);
            while (!q1.empty() && x >= q1.back().w) {
                q1.del_back();
            }
            q1.add(x, i);
            while (!q2.empty() && x <= q2.back().w) {
                q2.del_back();
            }
            q2.add(x, i);
            Node a = q1.front(), b = q2.front();
            while (a.w - b.w > k) {
                if (a.id < b.id) {
                    q1.del_front();
                    last = a.id;
                }
                else {
                    q2.del_front();
                    last = b.id;
                }
                a = q1.front();
                b = q2.front();
            }
            ans = max(i - last, ans);
        }
        printf("%d
    ", ans);
        return 0;
    }
    
  • 相关阅读:
    select 1
    使用Word2016发布CSDN博客
    使用word 2013 发布csdn博客
    使用word写CSDN博客文章
    用Word 写csdn blog
    如何使用office2016发布CSDN博客
    用word发CSDN blog
    使用word文档直接发表博客 8 )
    将Word发布到博客园
    Word 2010发布博客文章(修正)
  • 原文地址:https://www.cnblogs.com/poi-bolg-poi/p/13590584.html
Copyright © 2011-2022 走看看