• 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>了……

    相关文章
    相关标签/搜索
    白小姐期期准开奖结果管家婆王中王开奖王,管家婆铁算盘一句解特,2019香港开奖结果记录,2019六开彩开奖结果,4887铁算盘资料 从化市| 肇庆市| 施甸县| 梁平县| 九龙县| 噶尔县| 大埔县| 孝感市| 玉龙| 乐清市| 广宗县| 周宁县| 沁源县| 德阳市| 桦南县| 屯门区| 霸州市| 林西县| 辉县市| 商洛市| 桂平市| 阿鲁科尔沁旗| 湟源县| 达孜县| 海安县| 开原市| 凭祥市| 景东| 平利县| 和顺县| 镶黄旗| 霞浦县| 郯城县| 南宁市| 旬阳县| 贵港市| 嘉善县| 福贡县| 湖州市| 沙田区| 惠州市| 河津市| 胶州市| 镇巴县| 江都市| 三门峡市| 许昌县| 遂川县| 苏尼特右旗| 梅河口市| 青铜峡市| 唐河县| 图们市| 延川县| 绥芬河市| 慈利县| 冀州市| 鲁山县| 左贡县| 油尖旺区| 佛坪县| 合水县| 万荣县| 双江| 神农架林区| 贞丰县| 沂水县| 顺平县| 济源市| 交城县| 辽中县| 洪湖市| 广南县| 阳高县| 清流县| 綦江县| 临湘市| 巫溪县| 双桥区| 岐山县| 怀集县| 舒城县| 沙河市| 信宜市| 喀喇沁旗| 山东省| 德格县| 屏东市| 虎林市| 忻城县| 平昌县| 冕宁县| 凯里市| 石泉县| 上林县| 南宫市| 荔波县| 翁源县| 明溪县| 本溪| 金秀| 马公市| 额济纳旗| 彭泽县| 云浮市| 垫江县| 前郭尔| 中卫市| 河津市| 满洲里市| 育儿| 左贡县| 松溪县| 阿坝| 孝义市| 凌云县| 凤台县| 双柏县| 正蓝旗| 奉新县| 中超| 乌苏市| 徐州市| 政和县| 大石桥市| 天峻县| 新营市| 亚东县| 三河市| 双桥区| 通辽市| 定西市| 乾安县| 沂源县| 揭西县| 堆龙德庆县| 大连市| 肇东市| 东乌珠穆沁旗| 太和县| 舒兰市| 文化| 衡阳市| 鱼台县| 阿城市| 鹤庆县| 石狮市| 关岭| 溧水县| 陆川县| 柯坪县| 兴城市| 长垣县| 叙永县| 西昌市| 西充县| 甘孜县| 邵阳县| 铜陵市| 林西县| 顺平县| 桐梓县| 驻马店市| 天峻县| 都昌县| 边坝县| 乌恰县| 保德县| 新沂市| 淅川县| 济阳县| 杭州市| 章丘市| 开化县| 大城县| 安龙县| 桂东县| 廊坊市| 祁阳县| 新闻| 辽中县| 孝感市| 富平县| 黑山县| 庆云县| 仪陇县| 宁阳县| 宿松县| 新民市| 佳木斯市| 永平县| 开封市| 张北县| 巫山县| 涿州市| 台山市| 巍山| 哈密市| 泽普县| 木里| 琼结县| 井研县| 文化| 广东省| 商水县| 龙江县| 日喀则市| 宜城市| 通州区| 卢氏县| 武强县| 浮梁县| 邵阳县| 佛山市| 和政县| 天津市| 大石桥市| 涿鹿县| 右玉县| 马公市| 临漳县| 泽库县| 开平市| 德惠市| 大关县| 溧水县| 商南县| 大田县| 青海省| 广州市| 观塘区| 台山市| 乌兰浩特市| 什邡市| 绍兴市| 五华县| 寿阳县| 阳谷县| 祁阳县| 杂多县| 尉氏县| 玉环县| 龙胜| 高邑县| 祁门县| 漯河市| 双牌县| 敦煌市| 北辰区| 辽宁省| 江阴市| 饶阳县| 乌苏市| 丰都县| 宁津县| 临猗县| 大姚县| 霍山县| 楚雄市| 香河县| 开封市| 防城港市| 平安县| 阿城市| 广东省| 临颍县| 永嘉县| 辽阳县| 伊通| 潢川县| 西乌珠穆沁旗| 盐山县| 崇信县| 连州市| 三河市| 南川市| 本溪市| 淮滨县| 阿勒泰市| 青田县| 博爱县| 卓尼县| 阿克苏市| 繁峙县| 高雄县| 南江县| 崇阳县| 博爱县| 平乡县| 靖西县| 沛县| 彰化县| 临沂市| 湾仔区| 广德县| 钟山县| 收藏| 汉沽区| 五大连池市| 岗巴县| 和政县| 永平县| 太白县| 普兰县| 平南县| 嘉祥县| 大石桥市| 青龙| 炉霍县| 阳信县| 中西区| 连城县| 汉源县| 手机| 新乐市| 安溪县| 大埔县| 上林县| 龙山县| 齐河县| 枞阳县| 鄂尔多斯市| 磴口县| 安宁市| 新昌县| 嘉义市| 太康县| 南投市| http://3g.jvz1j0r7o.fun http://3g.gz1980bec.fun http://3g.bo2020coachs.fun http://3g.gz1980surfacec.fun http://3g.gz1980popc.fun http://3g.yqo8j8rl0v.fun http://3g.jvz1j1r5o.fun http://3g.gz1980supplyc.fun http://3g.gz1980aizc.fun http://3g.bo2020reads.fun http://3g.gz1980preventc.fun http://3g.yqo6j7rl0v.fun http://3g.bo2020beats.fun http://3g.yqo7j2rl4v.fun http://3g.bo2020cozpletes.fun http://3g.gz1980zodelc.fun http://3g.yqo1j7rl6v.fun http://3g.gz1980perzitc.fun