在解决这个问题的过程中,我们可以利用树状数组进行优化,以提高算法的效率和性能。 树状数组是一种高效的数据结构,用于处理一维数组的前缀和问题。利用树状数组,我们可以在O(logN)的时间复杂度内完成单点更新和前缀和查询操作。这使得树状数组成为解决最长上升子序列问题的理想工具。 在解决最长上升子序列问题时,我们首先...
最长上升子序列比较暴力的写法是n2的,实际上我们求得就是前面的比当前小的最长上升子序列的最大值; 树状数组可以优化它; 倒过来求就是最长下降子序列; #include<cstdio>#include<cstring>#include<algorithm>usingnamespacestd;constintmaxn=1e5+10; typedefdoubledd; typedeflonglongll; ll n; ll a[maxn]; ...
---树状数组 我们看到代码中有两行 for(ll j=1;j<=i;j++)if(a[j]<a[i]) 一般有这个代码的dp题目都可以用树状数组来优化; 如果不信的巨佬看看我之前写的树状数组优化题目; 所以 for(ll j=1;j<=i;j++)if(a[j]<a[i]) sum=max(sum,dp[j]); 就可以转化为求1-a[i]的最大值 如下网址:h...