zoukankan      html  css  js  c++  java
  • CodeForces

    (和南京那题很像,比赛的时候就两个队A了。我们队找到了思路,但是花了1个多小时没有写出来,emmmm,我的锅,当时线段树写丑了。

    题意:给定数组,Q次询问,假设把第i个大小hi改为b,求最长上升子序列LIS,(Q次询问是独立的)。

    思路:对于原来的数组,假设ans=LIS。那么改一个数字,ans1或=ans,或者=ans-1,或者ans+1。

    (LIS1i表示以i为终点的最长上升子序列。LIS2i表示以i为起点的最长上升子序列。

    考虑两种情况,用到b和不用b。

    1,用到b,那么找左边hi<b而且LIS1最大,找到右边hi>b而且LIS2最大。

    2,不用b,那么验证是否原来的所有最长LIS都经过i。

          对于1,我们需要满足找到j<i,hj<hi,的最大LIS1。我们建立N棵线段树,每棵树记录对应高度的LIS1。然后在1到j-1这几棵线段树上去找高度在1到hi-1范围的最大值。 转化一下,这N棵树可以转化为主席树。没棵树从root[j]跑,去更新对应高度的最大值(高度离散化)。   

  • 相关阅读:
    HDU6808 Go Running(未解决问题
    K
    E
    D
    B
    I
    HDU 2255 奔小康赚大钱 (KM算法模板)
    hdu 1150 Machine Schedule(二分图模板题)
    ACM-ICPC 2018 焦作赛区网络预赛G Give Candies(欧拉降幂)
    ACM-ICPC 2018 焦作赛区网络预赛 L:Poor God Water(杜教BM)
  • 原文地址:https://www.cnblogs.com/hua-dong/p/9107854.html
Copyright © 2011-2022 走看看