zoukankan      html  css  js  c++  java
  • hdu 3530 Subsequence

    题目连接

    http://acm.hdu.edu.cn/showproblem.php?pid=3530

    Subsequence

    Description

    There is a sequence of integers. Your task is to find the longest subsequence that satisfies the following condition: the difference between the maximum element and the minimum element of the subsequence is no smaller than m and no larger than k.

    Input

    There are multiple test cases.
    For each test case, the first line has three integers, n, m and k. n is the length of the sequence and is in the range $[1, 100000]$. m and k are in the range $[0, 1000000]$. The second line has n integers, which are all in the range $[0, 1000000]$.
    Proceed to the end of file.

    Output

    For each test case, print the length of the subsequence on a single line.

    Sample Input

    5 0 0
    1 1 1 1 1
    5 0 3
    1 2 3 4 5

    Sample Output

    5
    4

    RMQ线段树。。

     1 #include<algorithm>
     2 #include<iostream>
     3 #include<cstdlib>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<vector>
     7 #include<map>
     8 #include<set>
     9 using std::set;
    10 using std::map;
    11 using std::min;
    12 using std::max;
    13 using std::cin;
    14 using std::cout;
    15 using std::endl;
    16 using std::find;
    17 using std::sort;
    18 using std::pair;
    19 using std::vector;
    20 #define sz(c) (int)(c).size()
    21 #define all(c) (c).begin(), (c).end()
    22 #define iter(c) decltype((c).begin())
    23 #define cls(arr,val) memset(arr,val,sizeof(arr))
    24 #define cpresent(c, e) (find(all(c), (e)) != (c).end())
    25 #define rep(i, n) for (int i = 1; i <= (int)(n); i++)
    26 #define tr(c, i) for (iter(c) i = (c).begin(); i != (c).end(); ++i)
    27 #define pb(e) push_back(e)
    28 #define mp(a, b) make_pair(a, b)
    29 #define mid ((l+r)>>1)
    30 #define lc (root<<1)
    31 #define rc (root<<1|1)
    32 const int Max_N = 100010;
    33 const int INF = 0x3f3f3f3f;
    34 typedef unsigned long long ull;
    35 int n, m, k, tmin, tmax;
    36 struct SegTree {
    37     struct Node { int max, min; }seg[Max_N << 2];
    38     inline void built(int root, int l, int r) {
    39         if (l == r) {
    40             scanf("%d", &seg[root].max), seg[root].min = seg[root].max;
    41             return;
    42         }
    43         built(lc, l, mid);
    44         built(rc, mid + 1, r);
    45         seg[root].max = max(seg[lc].max, seg[rc].max);
    46         seg[root].min = min(seg[lc].min, seg[rc].min);
    47     }
    48     inline void query(int root, int l, int r, int x, int y) {
    49         if (x > r || y < l) return;
    50         if (x <= l && y >= r) {
    51             tmin = min(tmin, seg[root].min);
    52             tmax = max(tmax, seg[root].max);
    53             return;
    54         }
    55         query(lc, l, mid, x, y);
    56         query(rc, mid + 1, r, x, y);
    57     }
    58     inline int query(int l, int r) {
    59         tmin = INF, tmax = -INF;
    60         query(1, 1, n, l, r);
    61         return tmax - tmin;
    62     }
    63 }seg;
    64 int main() {
    65 #ifdef LOCAL
    66     freopen("in.txt", "r", stdin);
    67     freopen("out.txt", "w+", stdout);
    68 #endif
    69     int l, r, ans;
    70     while (~scanf("%d %d %d", &n, &m, &k)) {
    71         l = 1, ans = 0;
    72         seg.built(1, 1, n);
    73         rep(i, n) {
    74             r = i;
    75             if (l > r) continue;
    76             while (seg.query(l, r) > k) l++;
    77             if (seg.query(l, r) >= m && seg.query(l, r) <= k) ans = max(ans, r - l + 1);
    78         }
    79         printf("%d
    ", ans);
    80     }
    81     return 0;
    82 }
    View Code
    By: GadyPu 博客地址:http://www.cnblogs.com/GadyPu/ 转载请说明
  • 相关阅读:
    P1939 【模板】矩阵加速(数列)
    NUMBER BASE CONVERSION POJ
    Raid POJ
    Genius ACM HihoCoder
    BZOJ1500: [NOI2005]维修数列 Splay维护序列
    BZOJ3245: 最快路线 拆点dijkstra
    存个头
    895E
    894E
    tarjan缩点/求桥模板
  • 原文地址:https://www.cnblogs.com/GadyPu/p/4593874.html
Copyright © 2011-2022 走看看