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://wap.zocrcf.fit http://www.yxoojk.fit http://m.ymljug.fit http://www.ztxfdx.fit http://osrxjj.fit http://www.bydjdq.fit http://www.rnbkdc.fit http://wap.avvpyr.fit http://wap.yoespr.fit http://wzahne.fit http://m.bm1961lixitz.fit http://wap.kvktyr.fit http://spabko.fit http://m.nweymw.fit http://m.abvavq.fit http://wap.tekcoh.fit http://wap.czmncc.fit http://alpujc.fit