HDU 3308. LCIS

Brief description:

… 动态维护一个数组 A[],支持以下两种操作

  • U a b: 单点修改,将 A[a] 替换成 b。(从 0 标号。。)
  • Q a b: 区间询问,询问 [a, b] 区间的 LCIS (Longest Continuous Increase Subsequence, 最长连续递增子序列) 的长度。

Analysis:

struct Seg{
    int ll, rr, ss;
} T[4*N];

...

void Update(int x, int l, int r){
    T[x].ll = T[lx].ll, T[x].rr = T[rx].rr;
    T[x].ss = max(T[lx].ss, T[rx].ss);
    if (A[ml] < A[mr]){
        if (T[x].ll == mr - l) T[x].ll += T[rx].ll;
        if (T[x].rr == r - ml) T[x].rr += T[lx].rr;
        checkMax(T[x].ss, T[lx].rr + T[rx].ll);
    }
}

http://acm.hust.edu.cn/vjudge/contest/viewSource.action?id=3946299

External link: