P4309 [TJOI2013]最长上升子序列

Posted y2823774827y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P4309 [TJOI2013]最长上升子序列相关的知识,希望对你有一定的参考价值。

题目

P4309 [TJOI2013]最长上升子序列

做法

最长上升序列的求法肯定是烂大街了

水题是肯定的,确定出序列的位置然后套个树状数组就好了(强制在线的话改成线段树维护前缀最值也行)

所以说这题其实难点在与怎么让代码简洁,见识到一个新的(STL)(rope)

My complete code

#include<bits/stdc++.h>
#include<ext/rope>
using namespace std;
typedef int LL;
const LL maxn=1e6;
__gnu_cxx:: rope<LL> a;
LL n;
LL tree[maxn],ans[maxn];
inline LL Lowbit(LL x){ return x&(-x); }
inline LL Query(LL x){
    LL ret(0);
    for(;x;x-=Lowbit(x)) ret=max(ret,tree[x]);
    return ret;
}
inline void Modify(LL x,LL val){
    for(;x<=n;x+=Lowbit(x))
        tree[x]=max(tree[x],val);
}
int main(){
    cin>>n;
    for(LL i=1;i<=n;++i){
        LL p; cin>>p;
        a.insert(p,i);
    }
    for(LL i=0;i<n;++i){
        LL num=a[i];
        ans[num]=Query(num-1)+1;
        Modify(num,ans[num]);
    }
    for(LL i=1;i<=n;++i){
        ans[i]=max(ans[i],ans[i-1]);
        cout<<ans[i]<<endl;
    }return 0;
} 

以上是关于P4309 [TJOI2013]最长上升子序列的主要内容,如果未能解决你的问题,请参考以下文章

[BZOJ3173][Tjoi2013]最长上升子序列

bzoj3173 [Tjoi2013]最长上升子序列

BZOJ3173: [Tjoi2013]最长上升子序列

BZOJ 3173: [Tjoi2013]最长上升子序列 [splay DP]

BZOJ3173: [Tjoi2013]最长上升子序列(树状数组)

bzoj5157: [Tjoi2014]上升子序列(树状数组LIS)