第一问是求最长不升子序列,第二问是求最长上升子序列

对于第一问利用vector的反向迭代器来转换为最长不降子序列

LL x;
vi v(1, -1),j(1,-1),s;
int main()
{
    while (scanf("%lld",&x)==1)
    {
        s.pb(x);
        if (x > v.back())
            v.pb(x);
        else
            *lower_bound(all(v), x) = x;
    }
    for(auto it=s.rbegin();it!=s.rend();it++){
        if((*it)>=j.back())
        j.pb(*it);
        else *upper_bound(all(j),*it)=*it;
    }
    cout<<j.size()-1<<"\n";
    cout << v.size()-1;
    return 0;
}
此文章已被阅读次数:正在加载...更新于