<address id="nhfpd"></address>

                <sub id="nhfpd"></sub>

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

                  相关文章
                  相关标签/搜索
                  何仙姑六肖期期准资料 夏邑县| 大宁县| 连平县| 井陉县| 泰顺县| 收藏| 绍兴县| 武义县| 新巴尔虎左旗| 南雄市| 达州市| 喜德县| 南皮县| 吴川市| 兰西县| 泰兴市| 和顺县| 华蓥市| 嘉鱼县| 开江县| 防城港市| 沽源县| 仲巴县| 汉川市| 恩平市| 汽车| 桂阳县| 阳城县| 屏南县| 横山县| 时尚| 泸西县| 阆中市| 哈密市| 连山| 汉川市| 贵州省| 阿拉尔市| 临桂县| 望谟县| 池州市| 宽城| 武强县| 筠连县| 林周县| 迁西县| 溆浦县| 咸阳市| 鸡泽县| 长泰县| 庆元县| 柘城县| 胶州市| 长泰县| 巴马| 宜君县| 泰宁县| 岐山县| 茌平县| 乌鲁木齐市| 内黄县| 吉林市| 青海省| 大同县| 北票市| 定远县| 敖汉旗| 宁蒗| 即墨市| 丹寨县| 开远市| 新乡市| 尚志市| 来安县| 岗巴县| 罗田县| 台湾省| 杭州市| 定西市| 乡宁县| 逊克县| 济宁市| 雷山县| 贺兰县| 禄劝| 慈溪市| 元江| 辽源市| 伊宁县| 上林县| 塔河县| 东安县| 普定县| 台南县| 靖江市| 舞钢市| 荣昌县| 康乐县| 屏东市| 营口市| 金塔县| 隆尧县| 香格里拉县| 盐亭县| 昆明市| 东莞市| 赤城县| 应城市| 丁青县| 乌拉特后旗| 慈利县| 永济市| 明溪县| 万宁市| 仁怀市| 泸定县| 万山特区| 扶余县| 泰安市| 固始县| 桐柏县| 原平市| 无极县| 灵川县| 枣强县| 远安县| 哈密市| 慈溪市| 抚州市| 南宁市| 高邑县| 南陵县| 桂林市| 清远市| 亳州市| 扶风县| 大安市| 土默特左旗| 曲沃县| 永宁县| 龙岩市| 廉江市| 隆尧县| 承德县| 砀山县| 甘孜县| 丹巴县| 大邑县| 阳朔县| 德格县| 泸西县| 潼南县| 连江县| 四子王旗| 营山县| 巴东县| 伽师县| 闵行区| 阿瓦提县| 青岛市| 新和县| 兴化市| 眉山市| 子洲县| 阿拉善右旗| 临邑县| 田林县| 长顺县| 龙陵县| 怀集县| 葫芦岛市| 洛川县| 江安县| 东宁县| 上栗县| 靖边县| 乌拉特中旗| 澄城县| 宁蒗| 沙雅县| 乐清市| 布拖县| 渝北区| 马山县| 吉隆县| 大关县| 岑巩县| 罗山县| 迁西县| 百色市| 华安县| 苏州市| 庆阳市| 博罗县| 昌图县| 莱州市| 中方县| 南丹县| 永兴县| 楚雄市| 鲁甸县| 沙坪坝区| 沁阳市| 蚌埠市| 明星| 望奎县| 高碑店市| 仪陇县| 中阳县| 弥渡县| 建湖县| 元谋县| 遂昌县| 成都市| 盐池县| 松阳县| 沂源县| 新化县| 志丹县| 称多县| 西乡县| 南澳县| 池州市| 宁河县| 平乐县| 高密市| 木兰县| 赫章县| 杭锦旗| 平果县| 桓台县| 湖北省| 苗栗县| 晋江市| 民县| 鸡泽县| 乌拉特中旗| 海盐县| 河津市| 龙陵县| 崇阳县| 肥乡县| 丹巴县| 延寿县| 西乡县| 河间市| 潮州市| 兴仁县| 武安市| 河北区| 昌平区| 吕梁市| 卓资县| 轮台县| 平陆县| 垣曲县| 灵石县| 鹤庆县| 全椒县| 格尔木市| 兴和县| 宁城县| 乌兰县| 上蔡县| 元朗区| 江都市| 商都县| 枣阳市| 桐梓县| 六枝特区| 北碚区| 大英县| 东方市| 通城县| 广元市| 嘉善县| 隆尧县| 黎平县| 霍邱县| 西吉县| 江阴市| 千阳县| 辛集市| 云南省| 高邑县| 勃利县| 福鼎市| 英德市| 内江市| 勐海县| 游戏| 慈利县| 电白县| 启东市| 军事| 阿城市| 同仁县| 会昌县| 德钦县| 容城县| 安丘市| 周至县| 休宁县| 元谋县| 大同县| 东山县| 临清市| 三亚市| 柯坪县| 古浪县| 北辰区| 同德县| 黑水县| 普陀区| 房产| 汕尾市| 苍南县| 门头沟区| 句容市| 盐源县| 佛坪县| 寻乌县| 西林县| 鄯善县| 清苑县| 尚义县| 安远县| 怀宁县| 徐水县| 沙田区| 金阳县| 文登市| 手机| 梅河口市| 沾益县| 温泉县| 绥棱县| 利津县| 绥阳县| 吉林省| 黄山市| 青州市| 泰和县| 盐城市| 蕉岭县| 柘城县| 浦城县| 黔西| 濉溪县| 烟台市| 游戏| 肥城市| 都安| 六安市| 德阳市| 略阳县| 轮台县| 叶城县| 乌拉特后旗| 南靖县| 旌德县| 凤城市| 新竹市| 明星| 庆安县| 七台河市| 彰化市| 广州市| 巴林左旗| 鄱阳县| 商洛市| 安徽省| 昆明市| 曲阜市| 贺兰县| 盘锦市| 福建省| 晋江市| 三明市| 信宜市| 达州市| 咸宁市| 漳浦县| 高清| 嘉兴市| 晋州市| 石屏县| 东明县| 阿勒泰市| 三江| 正蓝旗| 荆州市| 同心县| 南和县| 凤城市| 长治市| 手游| 榆社县| 南开区| SHOW| 加查县| 上思县| 漯河市| 藁城市| 麻城市| 柞水县| 五常市| 遂宁市| 哈巴河县| 新河县| 高州市| 纳雍县| 大新县| 潼南县| 扶绥县| 津市市| 石棉县| 丹江口市| 罗定市| 长葛市| 肇东市| 丰原市| 沂南县| 汉沽区| 古蔺县| 龙江县| 天柱县| 汽车| 霍州市| 黑河市| 广德县| 宝丰县| 开平市| 乡城县| 全州县| 诸暨市| 乐清市| 长宁区| 行唐县| 宁强县| 梧州市| 宁海县| 仪陇县| 泗阳县| 象州县| 滕州市| 当雄县| 屯门区| 阿巴嘎旗| 兰考县| 华安县| 阿城市| 泰来县| 沧州市| 荣昌县| 龙山县| 涟水县| 宁强县| 安阳市| 襄城县| 乌审旗| 绥德县| 哈尔滨市| 儋州市| 渭南市| 溧水县| 浮梁县| 安陆市| 贺州市| 南部县| 徐闻县| 汉川市| 四会市| 含山县| 葫芦岛市| 沧源| 襄城县| 香河县| 乐山市| 东城区| 綦江县| 象山县| 炉霍县| 玉屏| 嘉祥县| 大英县| 乐山市| 永平县| 都江堰市| 罗甸县| 三亚市| 连州市| 阿城市| 秀山| 察哈| 郓城县| 黑山县| 永宁县| 大冶市| 景东| 宜丰县| 兰溪市| 班玛县| 苏尼特右旗| 台江县| 石嘴山市| 武功县| 抚顺市| 仪征市| 白城市| 汾阳市| 柏乡县| 白水县| 福海县| 花莲市| 焦作市| 左权县| 光山县| 合作市| 湛江市| 曲阳县| 牡丹江市| 赤壁市| 玛多县| 河北区| 交口县| 西乌| 瑞丽市| 富平县| 四会市| 尤溪县| 石泉县| 汶上县| 墨玉县| 周宁县| 杭锦后旗| 丽江市| 浦江县| 贡嘎县| 奉贤区| 鄱阳县| 葵青区| 鄂伦春自治旗| 潜江市| 巫山县| 马关县| 云龙县| 綦江县| 榕江县| 岳阳县| 舒兰市| 小金县| 双辽市| 黄骅市| 犍为县| 民乐县| 邵阳县| 谢通门县| 寿阳县| 洮南市| 花垣县| 西昌市| 武鸣县| 南丹县| 枝江市| 宝山区| 青州市| 鱼台县| 垫江县| 娄底市| 肥西县| 马公市| 沛县| 红河县| 连城县| 靖远县| 罗源县| 岑溪市| 息烽县| 双江| 万全县| 河津市| 平陆县| 沭阳县| 蒙城县| 高邮市| 九江市| 台东县| 龙川县| 兰西县| 浮山县| 隆昌县| 肃宁县| 淮滨县| 峨眉山市| 福鼎市| 达州市| 祥云县| 银川市| 井陉县| 漾濞| 肃南| 连州市| 临泽县| 清镇市| 永顺县| 大石桥市| 西乌珠穆沁旗| 彰武县| 南江县| 安达市| 贡嘎县| 含山县| 宜宾市| 高平市| http://www.wmccrv.fit http://www.otdakl.fit http://m.lyumcs.fit http://bm1961xissz.fit http://wap.nhumkz.fit http://m.qpmojc.fit http://lzlcjv.fit http://www.ytiqki.fit http://wap.glprfr.fit http://wap.byvjow.fit http://lvlyfe.fit http://www.mvtqsx.fit http://wap.ufvpoo.fit http://m.afydqo.fit http://ijhanu.fit http://spycpe.fit http://www.qjreye.fit http://wap.gcytbt.fit