阅读背景:

cf1132G 线段树解分区间LIS(一种全新的线段树解LIS思路)+单调栈

来源:互联网 
/*
给定n个数的数列,要求枚举长为k的区间,求出每个区间的最长上升子序列长度

首先考虑给定n个数的数列的LIS求法:从左往右枚举第i点作为最大点的贡献, 
那么往左找到第一个比a[i]大的数,设这个数下标l,那么[l+1,i-1]的后继显然是i
那么[l+1,i-1]区间,和包括第i个数的LIS都可以+1,处理完所有点后求[1,n]区间的最大值即可
区间更新显然用线段树解决,线段树叶子结点维护第i个位置被加次数,即以第i个结点为起点的LIS长度 
 
本题是枚举长为k的区间,求每个区间的LIS,那么只要在更新时查询区间[i-k+1,i]的最大值即可
要先预处理出第一个比a[i]大的a[i]左边的数的下标 : 单调栈 

给定n个数的数列,要求枚举长为k的区间,求出每个区间的最长上升子序列长度

首先



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: