<address id="jv157"></address>
<sub id="jv157"></sub>

      <address id="jv157"></address>

      <thead id="jv157"></thead>

        HDU6592 Beauty Of Unimodal Sequence

        Beauty Of Unimodal Sequence

        给一个序列,在满足单调递增或者单调递减或者先增后减的最长子序列集合里找到下标字典序最大以及最小的两个子序列,输出这两个子序列里元素的下标。

        n≤3×105

        moomhxy的题解

        先正着求一遍LIS,再反着求一遍LIS,求出每个点作为上升子序列结尾的最大长度和每个点作为下降子序列开头的最大长度。

        我们可以枚举这个单峰序列的峰顶是什么,这样最长长度就找到了。

        然后考虑怎么构造解。

        求字典序最小的话,首先找到第一个顶峰,然后往前找递减的序列中下标较小的,往后就依次找,这样能保证字典序最小。

        如何找这个下标较小的呢?显然我们希望每种结尾长度的点都越靠前越好。所以用单调栈维护即可。

        最大的话找到最后一个顶峰,往前是依次找,往后是找LIS中下标大的。维护方法类似。

        时间复杂度 O(n log n),瓶颈在于求LIS。

        CO int N=300000+10;
        int a[N],dp[N],up[N],down[N];
        int h[N],st[N],ans[N];
        
        void real_main(int n){
            fill(dp,dp+n+1,INT_MAX),dp[0]=0;
            for(int i=1;i<=n;++i){
                read(a[i]);
                up[i]=lower_bound(dp+1,dp+n+1,a[i])-dp;
                dp[up[i]]=a[i];
            }
            fill(dp,dp+n+1,INT_MAX),dp[0]=0;
            for(int i=n;i;--i){
                down[i]=lower_bound(dp+1,dp+n+1,a[i])-dp;
                dp[down[i]]=a[i];
            }
            // minimum lexicographic order
            int tot=0;
            int peak=1,height=up[1]+down[1];
            for(int i=2;i<=n;++i)
                if(up[i]+down[i]>height) peak=i,height=up[i]+down[i];
            int top=0;
            h[up[peak]]=a[peak];
            for(int i=peak-1;i;--i){
                if(a[i]>=h[up[i]+1]) continue;
                while(top and up[i]>=up[st[top]]) --top;
                st[++top]=i;
                h[up[i]]=a[i];
            }
            for(;top;--top) ans[++tot]=st[top];
            ans[++tot]=peak;
            for(int i=peak+1;i<=n;++i)
                if(down[i]==down[ans[tot]]-1 and a[i]<a[ans[tot]]) ans[++tot]=i;
            for(int i=1;i<=tot;++i) printf("%d%c",ans[i]," \n"[i==tot]);
            // maximum lexcographic order
            tot=0;
            peak=1,height=up[1]+down[1];
            for(int i=2;i<=n;++i)
                if(up[i]+down[i]>=height) peak=i,height=up[i]+down[i];
            top=0;
            st[++top]=peak;
            for(int i=peak-1;i;--i)
                if(up[i]==up[st[top]]-1 and a[i]<a[st[top]]) st[++top]=i;
            for(;top;--top) ans[++tot]=st[top];
            h[down[peak]]=a[peak];
            for(int i=peak+1;i<=n;++i){
                if(a[i]>=h[down[i]+1]) continue;
                while(tot and down[i]>=down[ans[tot]]) --tot;
                ans[++tot]=i;
                h[down[i]]=a[i];
            }
            for(int i=1;i<=tot;++i) printf("%d%c",ans[i]," \n"[i==tot]);
        }
        int main(){
            for(int n;~scanf("%d",&n);) real_main(n);
            return 0;
        }

        HDU什么时候开始支持<bits/stdc++.h>了……

        相关文章
        相关标签/搜索
        2020年正版综合资料 兴业县| 潞西市| 湄潭县| 花垣县| 黎平县| 炉霍县| 盐源县| 灵川县| 滁州市| 招远市| 德州市| 河南省| 呼伦贝尔市| 新宁县| 霍州市| 渝中区| 桦甸市| 兴安盟| 新安县| 甘南县| 汝州市| 襄城县| 广宁县| 鄂伦春自治旗| 海盐县| 涞水县| 隆回县| 廊坊市| 樟树市| 广河县| 绥化市| 易门县| 隆子县| 梨树县| 上虞市| 泰宁县| 潮安县| 潢川县| 阳原县| 高阳县| 元阳县| 诸暨市| 南川市| 承德市| 宜昌市| 敦煌市| 乐清市| 兴业县| 茌平县| 邓州市| 团风县| 荥经县| 伊川县| 安达市| 高陵县| 滦平县| 连城县| 遵化市| 福州市| 尼勒克县| 葵青区| 濮阳县| 东光县| 驻马店市| 岳普湖县| 甘泉县| 葵青区| 电白县| 闽侯县| 邻水| 陇川县| 梁山县| 若羌县| 逊克县| 琼结县| 贡山| 洛川县| 开远市| 河源市| 霍邱县| 松原市| 尚义县| 宜兰市| 黄陵县| 长垣县| 峨山| 慈溪市| 集安市| 南丹县| 和平区| 南康市| 正阳县| 丽江市| 车险| 平昌县| 吴堡县| 兴文县| 遂溪县| 瑞金市| 东台市| 织金县| 开鲁县| 天门市| 昌都县| 大连市| 寿光市| 惠水县| 德令哈市| 夹江县| 凯里市| 九龙坡区| 安庆市| 清丰县| 阿鲁科尔沁旗| 新绛县| 阿图什市| 新巴尔虎右旗| 博乐市| 洪雅县| 广灵县| 内乡县| 六枝特区| 大足县| 横山县| 伊吾县| 星座| 凤庆县| 崇左市| 高安市| 灌云县| 康乐县| 衡阳市| 外汇| 朔州市| 偃师市| 北海市| 龙里县| 同德县| 沭阳县| 如皋市| 土默特左旗| 贵阳市| 罗平县| 沾化县| 太仓市| 和平区| 铜川市| 余干县| 称多县| 佳木斯市| 方山县| 西昌市| 湟中县| 稷山县| 普兰店市| 新疆| 江永县| 郴州市| 武穴市| 汝南县| 盘锦市| 永昌县| 江油市| 兴隆县| 凤山县| 安泽县| 田东县| 丹巴县| 邯郸市| 苍南县| 龙泉市| 玉溪市| 海原县| 海晏县| 遵义市| 凤冈县| 武平县| 桓仁| 公主岭市| 桂林市| 高雄县| 耒阳市| 正定县| 都昌县| 都匀市| 略阳县| 鄯善县| 阳城县| 乐清市| 安阳市| 大丰市| 靖宇县| 德令哈市| 铁岭县| 道孚县| 新沂市| 雅江县| 临猗县| 鄱阳县| 丹江口市| 汉寿县| 平安县| 伽师县| 申扎县| 会东县| 石棉县| 沙坪坝区| 富锦市| 墨竹工卡县| 六盘水市| 台湾省| 龙岩市| 博湖县| 漠河县| 远安县| 定边县| 大化| 海原县| 同心县| 屯门区| 苗栗县| 石林| 柳州市| 南京市| 大同市| 营山县| 文化| 南康市| 民勤县| 岱山县| 古田县| 黄平县| 城步| 碌曲县| 峨边| 黄大仙区| 平江县| 兴山县| 诸暨市| 隆尧县| 师宗县| 海安县| 内江市| 上栗县| 砚山县| 吉木萨尔县| 松溪县| 栖霞市| 乐至县| 雅安市| 竹溪县| 防城港市| 太仓市| 乐亭县| 略阳县| 崇阳县| 芷江| 莱阳市| 陇西县| 新泰市| 陕西省| 石景山区| 论坛| 鄂尔多斯市| 万州区| 宣威市| 江油市| 屏山县| 海阳市| 乌审旗| 山阳县| 珠海市| 新绛县| 江永县| 西乌珠穆沁旗| 漳平市| 襄垣县| 崇义县| 韩城市| 铁岭市| 贵溪市| 北流市| 尼玛县| 册亨县| 雷州市| 阳信县| 克山县| 拜泉县| 化隆| 海口市| 南通市| 九寨沟县| 曲沃县| 宜阳县| 屯门区| 玉环县| 封丘县| 烟台市| 新邵县| 安远县| 安宁市| 保靖县| 江门市| 抚顺县| 高邑县| 平南县| 太和县| 深州市| 涪陵区| 临夏县| 洮南市| 九龙坡区| 天气| 三江| 泸西县| 米林县| 武鸣县| 巨野县| 丽水市| 左云县| 揭阳市| 宣化县| 黄冈市| 微博| 渝中区| 拜城县| 邵阳县| 什邡市| http://3g.yqo1j4rl2v.fun http://3g.bo2020brands.fun http://3g.yqo3j1rl9v.fun http://3g.bo2020serves.fun http://3g.bo2020cashs.fun http://3g.gz1980increasec.fun http://3g.gz1980peakc.fun http://3g.yqo6j8rl0v.fun http://3g.bo2020holes.fun http://3g.gz1980echoc.fun http://3g.yqo0j0rl2v.fun http://3g.gz1980sharec.fun http://3g.yqo5j4rl2v.fun http://3g.bo2020achieves.fun http://3g.gz1980eatc.fun http://3g.bo2020specifys.fun http://3g.gz1980skipc.fun http://3g.yqo3j5rl3v.fun