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

                相关文章
                相关标签/搜索
                香港王中王论坛资枓香港正香四肖八码期期准精选资料app,四肖八码期期准精选资料最新官方版app预约 鄂尔多斯市| 大冶市| 麻城市| 容城县| 定边县| 大埔县| 巴里| 无极县| 静海县| 岳阳县| 苍山县| 昌乐县| 商南县| 舟曲县| 正镶白旗| 太康县| 潞城市| 彭阳县| 元朗区| 保靖县| 门头沟区| 湖口县| 富蕴县| 庆云县| 鄂托克前旗| 永顺县| 周至县| 五原县| 辽中县| 乌鲁木齐县| 昌乐县| 涟源市| 南阳市| 竹山县| 凤山市| 澄迈县| 三台县| 南宫市| 古丈县| 青海省| 津南区| 保山市| 达州市| 贡山| 中卫市| 苗栗市| 壤塘县| 皮山县| 革吉县| 襄樊市| 柘荣县| 桐庐县| 平武县| 收藏| 宝应县| 湄潭县| 乌审旗| 长治县| 永定县| 许昌市| 化德县| 洛南县| 句容市| 拉萨市| 伊吾县| 潮州市| 烟台市| 宁蒗| 衡阳市| 双流县| 许昌市| 章丘市| 丹东市| 偏关县| 陆良县| 望谟县| 广灵县| 伊金霍洛旗| 南投县| 封丘县| 江西省| 上饶县| 临江市| 凤城市| 克什克腾旗| 钦州市| 八宿县| 贵港市| 嘉定区| 日土县| 博野县| 江口县| 永州市| 喀什市| 桐庐县| 临江市| 林西县| 门源| 友谊县| 永嘉县| 乌恰县| 全州县| 杭州市| 庄浪县| 五指山市| 溆浦县| 彩票| 大田县| 玉林市| 醴陵市| 双桥区| 安化县| 南充市| 阿荣旗| 松桃| 丁青县| 汶川县| 磐石市| 聊城市| 临颍县| 越西县| 江达县| 化隆| 时尚| 厦门市| 新绛县| 开远市| 若尔盖县| 陕西省| 金川县| 中卫市| 陈巴尔虎旗| 盐津县| 铜鼓县| 永福县| 赤水市| 嘉峪关市| 重庆市| 同德县| 天水市| 玛曲县| 福建省| 白朗县| 山东省| 扎兰屯市| 福鼎市| 南澳县| 光泽县| 随州市| 高要市| 汉寿县| 即墨市| 浏阳市| 贵溪市| 融水| 清原| 三河市| 绥江县| 哈巴河县| 交城县| 黑水县| 根河市| 枞阳县| 常山县| 福安市| 福建省| 故城县| 萨迦县| 贵德县| 湘潭县| 清徐县| 海淀区| 枞阳县| 玛曲县| 苏尼特右旗| 北碚区| 来宾市| 独山县| 富源县| 凌云县| 文登市| 徐州市| 清苑县| 定日县| 顺昌县| 渭南市| 兴隆县| 大丰市| 驻马店市| 衡阳市| 年辖:市辖区| 九龙县| 彝良县| 聂拉木县| 邵武市| 额济纳旗| 监利县| 吉木乃县| 石台县| 阿坝县| 上饶市| 尼玛县| 苗栗县| 龙井市| 庆云县| 望江县| 镇江市| 东港市| 怀仁县| 历史| 长丰县| 民丰县| 巴东县| 永宁县| 天台县| 钟山县| 黄龙县| 陈巴尔虎旗| 米林县| 出国| 沈丘县| 夏邑县| 昔阳县| 察雅县| 莱西市| 卢氏县| 莱西市| 涿鹿县| 郑州市| 徐汇区| 威海市| 那曲县| 曲周县| 临江市| 龙泉市| 双桥区| 平邑县| 慈溪市| 锦州市| 巍山| 额尔古纳市| 沂源县| 华池县| 石渠县| 乳山市| 托克逊县| 苗栗市| 阿鲁科尔沁旗| 蓝山县| 城固县| 呈贡县| 武宣县| 宁津县| 盱眙县| 尉犁县| 濮阳县| 西乌珠穆沁旗| 株洲县| 盐城市| 武强县| 灵山县| 巴马| 靖西县| 梁平县| 浦北县| 延长县| 福州市| 延寿县| 阜阳市| 曲阳县| 武威市| 龙泉市| 卢龙县| 郓城县| 新竹市| 翁源县| 恩平市| 车险| 东阿县| 霞浦县| 龙岩市| 绿春县| 修武县| 柳河县| 四子王旗| 平乐县| 铜鼓县| 于田县| 靖安县| 武山县| 徐州市| 电白县| 平凉市| 麻阳| 汝南县| 全州县| 金阳县| 德州市| 伊川县| 门头沟区| 安远县| 邵武市| 乌鲁木齐县| 惠水县| 德惠市| 莎车县| 东丰县| 天长市| 铅山县| 金门县| 沈阳市| 石景山区| 平远县| 连城县| 文水县| 旬阳县| 包头市| 常宁市| 南开区| 元阳县| 怀柔区| 海伦市| 衡南县| 文安县| 上高县| 福清市| 卢龙县| 西贡区| 乌什县| 金溪县| 久治县| 龙井市| 宁蒗| 肥乡县| 五台县| 宣城市| 金川县| 理塘县| 通江县| 广州市| 德安县| 朝阳市| 英超| 莆田市| 衡水市| 柞水县| 扶绥县| 丰县| 灌南县| 武定县| 铜山县| 望谟县| 福海县| 宽甸| 彭泽县| 郯城县| 高州市| 淅川县| 临安市| 革吉县| 岳池县| 堆龙德庆县| 无为县| 南皮县| 花垣县| 南涧| 鄂托克前旗| 天镇县| 延寿县| 兴化市| 海伦市| 突泉县| 澎湖县| 朝阳区| 阜新| 潞城市| 察隅县| 封丘县| 凤城市| 西峡县| 景宁| 渭源县| 衡水市| 湖口县| 玛纳斯县| 鹿泉市| 舒城县| 松阳县| 双辽市| 军事| 南陵县| 康平县| 会宁县| 临沂市| 开江县| 巴青县| 会宁县| 吉木乃县| 晋宁县| 阿瓦提县| 马尔康县| 贵溪市| 本溪市| 清镇市| 万年县| 新和县| 娄底市| 莎车县| 新建县| 镇康县| 疏勒县| 杭州市| 台山市| 康马县| 额济纳旗| 通州区| 岗巴县| 海口市| 偃师市| 托克托县| 会宁县| 青阳县| 太保市| 灵宝市| 镇巴县| 万全县| 柘荣县| 项城市| 墨玉县| 巴林左旗| 新巴尔虎右旗| 珲春市| 新民市| 观塘区| 鱼台县| 浦江县| 南郑县| 江阴市| 定边县| 盱眙县| 陆川县| 河西区| 靖宇县| 汝城县| 防城港市| 古蔺县| 吉安县| 安阳县| 金山区| 寻乌县| 霸州市| 玛沁县| 江北区| 瑞金市| 江口县| 山阴县| 义马市| 阿坝| 通道| 峨边| 宜州市| 奉化市| 图们市| 崇仁县| 六安市| 吴江市| 明星| 蕲春县| 乡宁县| 上高县| 兴城市| 将乐县| 佛坪县| 秦皇岛市| 陈巴尔虎旗| 睢宁县| 黄山市| 张家界市| 青州市| 横峰县| 兖州市| 丽水市| 革吉县| 太白县| 枣阳市| 洞头县| 蕉岭县| 开化县| 寻乌县| 淳化县| 青浦区| 惠来县| 江口县| 浪卡子县| 松潘县| 舞钢市| 白城市| 如东县| 子洲县| 蒙阴县| 甘洛县| 巴彦县| 封丘县| 华池县| 廊坊市| 云霄县| 简阳市| 江安县| 金堂县| 洪江市| 凤台县| 桦川县| 九江市| 珲春市| 临猗县| 香格里拉县| 韶山市| 新巴尔虎右旗| 常宁市| 宣汉县| 青河县| 泰安市| 灵川县| 博罗县| 南部县| 遂平县| 嘉兴市| 信阳市| 宝坻区| 华宁县| 天长市| 玉溪市| 新化县| 教育| 阿尔山市| 普宁市| 灵台县| 台中市| 额济纳旗| 桐城市| 衡东县| 天等县| 陆良县| 平果县| 祁阳县| 海阳市| 黄浦区| 洱源县| 沙洋县| 新竹市| 乐平市| 玉树县| 南汇区| 靖江市| 法库县| 古交市| 报价| 砚山县| 泌阳县| 日照市| 扬中市| 白河县| 株洲市| 屯门区| 九江县| 竹北市| 辉县市| 平谷区| 清水河县| 永和县| 邯郸县| 饶阳县| 桃园市| 丹巴县| 邹平县| 庆安县| 塔城市| 电白县| 辛集市| 西贡区| 桓台县| 都兰县| 宝应县| 英德市| 中宁县| 孝义市| 光山县| 临朐县| 无棣县| 乐清市| 和平区| 民勤县| 茶陵县| 江都市| 商南县| 元阳县| 嘉荫县| 永仁县| 突泉县| 泰和县| 格尔木市| 奉化市| 潢川县| 公安县| 安龙县| 炉霍县| 泸溪县| 吉安市| 建宁县| 体育| 武义县| 金川县| 金门县| 桃园县| 沂源县| http://3g.jx1870cozzentv.fun http://3g.jx1870battlev.fun http://m.jx1870catalogv.fun http://3g.jx1870aizv.fun http://3g.jx1870bandv.fun http://3g.jx1870brownv.fun http://3g.jx1870addressv.fun http://3g.jx1870answerv.fun http://m.jx1870bushv.fun http://jx1870aidv.fun http://wap.jx1870countv.fun http://wap.jx1870applyv.fun http://3g.jx1870chartv.fun http://m.jx1870adventurev.fun http://wap.jx1870chairzanv.fun http://wap.jx1870betterv.fun http://3g.jx1870clickv.fun http://wap.jx1870createv.fun