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开奖记录结果查询香港马会开奖结果历史纪录在线查询 凭祥市| 临夏市| 环江| 精河县| 安溪县| 巴林左旗| 玛曲县| 东宁县| 民勤县| 咸宁市| 新余市| 桑植县| 板桥市| 吉安市| 明水县| 荣成市| 朔州市| 甘泉县| 汉寿县| 额敏县| 苍南县| 云南省| 雷山县| 屏东县| 盱眙县| 洪泽县| 太白县| 青龙| 永济市| 曲沃县| 长葛市| 梁山县| 和平区| 彭阳县| 郴州市| 锦屏县| 桐梓县| 昌黎县| 江山市| 额济纳旗| 织金县| 柳州市| 浙江省| 腾冲县| 永州市| 上虞市| 乌鲁木齐市| 泾阳县| 来安县| 工布江达县| 永州市| 太保市| 洛浦县| 吉林市| 左权县| 新竹县| 双牌县| 奎屯市| 炉霍县| 芜湖市| 沂水县| 永城市| 肥乡县| 双牌县| 鹿邑县| 宣城市| 台江县| 瓮安县| 南召县| 和龙市| 敖汉旗| 黑山县| 嘉祥县| 阳谷县| 板桥市| 新余市| 平塘县| 内江市| 静宁县| 呼和浩特市| 临安市| 隆安县| 团风县| 巨野县| 临泉县| 合山市| 张家口市| 丹棱县| 云龙县| 深泽县| 姜堰市| 乡宁县| 台湾省| 建宁县| 凤台县| 康保县| 黑水县| 湘乡市| 安国市| 金川县| 买车| 芜湖市| 隆化县| 噶尔县| 聂拉木县| 连州市| 和静县| 富民县| 景泰县| 霞浦县| 南安市| 介休市| 图木舒克市| 威宁| 清河县| 南皮县| 荃湾区| 分宜县| 鹤峰县| 田阳县| 长沙市| 卢龙县| 贵港市| 永泰县| 临桂县| 宁夏| 黑河市| 江口县| 无锡市| 宁陕县| 抚松县| 庆元县| 荥阳市| 迭部县| 禄劝| 日土县| 临西县| 开化县| 栾城县| 防城港市| 且末县| 阳春市| 榆林市| 清徐县| 贵溪市| 武鸣县| 封丘县| 长垣县| 望奎县| 桐庐县| 海淀区| 织金县| 石狮市| 贺兰县| 齐河县| 白玉县| 额济纳旗| 虎林市| 舞钢市| 乐业县| 开原市| 云梦县| 崇义县| 桓仁| 林周县| 明光市| 拉萨市| 龙游县| 曲靖市| 怀来县| 冷水江市| 梅州市| 安图县| 夏津县| 阿巴嘎旗| 东乌| 满洲里市| 伽师县| 邯郸县| 彭州市| 新疆| 夏河县| 玉屏| 鲜城| 虞城县| 德化县| 延长县| 黄浦区| 和平区| 南漳县| 大荔县| 伊金霍洛旗| 道孚县| 张家港市| 洛宁县| 柯坪县| 四平市| 灵丘县| 曲阳县| 改则县| 蒙自县| 镇远县| 鹤峰县| 凉城县| 射洪县| 赤峰市| 南江县| 商都县| 博兴县| 电白县| 万山特区| 蕲春县| 桦川县| 汽车| 嘉鱼县| 石嘴山市| 双牌县| 达州市| 如皋市| 合江县| 田东县| 洛隆县| 安仁县| 葫芦岛市| 惠州市| 奈曼旗| 长垣县| 会同县| 汝南县| 连城县| 怀宁县| 扎兰屯市| 右玉县| 平陆县| 鹤庆县| 霞浦县| 耿马| 年辖:市辖区| 武穴市| 西贡区| 通道| 商水县| 商水县| 栖霞市| 永清县| 民勤县| 宝丰县| 锡林浩特市| 连南| 集安市| 东莞市| 葵青区| 井研县| 乌拉特中旗| 内黄县| 垫江县| 轮台县| 上蔡县| 三明市| 隆化县| 西乡县| 建湖县| 壶关县| 梧州市| 柳林县| 泸溪县| 吴忠市| 溆浦县| 海南省| 尼玛县| 吉木萨尔县| 科技| 罗江县| 镇康县| 汤阴县| 双鸭山市| 安康市| 余干县| 呈贡县| 永和县| 绵阳市| 南汇区| 绵阳市| 屯留县| 崇阳县| 乐至县| 衡阳市| 儋州市| 琼结县| 安庆市| 新和县| 新竹县| 达孜县| 山东省| 中西区| 确山县| 宁城县| 江油市| 灵寿县| 东光县| 阿拉善左旗| 油尖旺区| 红原县| 沅陵县| 如东县| 景东| 石城县| 平度市| 潞西市| 信宜市| 甘肃省| 抚松县| 普格县| 尼木县| 怀仁县| 奎屯市| 广河县| 绥化市| 靖江市| 海淀区| 贵溪市| 牙克石市| 梓潼县| 永和县| 平舆县| 乡宁县| 堆龙德庆县| 仙游县| 望谟县| 襄城县| 昌图县| 集安市| 乌海市| 和平县| 新沂市| 丘北县| 曲靖市| 望江县| 芮城县| 正定县| 临沂市| 从江县| 张掖市| 葫芦岛市| 凤阳县| 遂平县| 乐业县| 邯郸市| 封开县| 东乌珠穆沁旗| 大宁县| 林西县| 乐都县| 海南省| 闻喜县| 隆回县| 盐池县| 翁牛特旗| 永吉县| 临汾市| 卢龙县| 察哈| 枣庄市| 涡阳县| 长海县| 玉林市| 莆田市| 永康市| 达拉特旗| 华亭县| 那曲县| 沽源县| 日土县| 永靖县| 山丹县| 合水县| 璧山县| 康乐县| 红桥区| 横峰县| 蒙阴县| 邯郸县| 泸溪县| 保靖县| 中西区| 呼和浩特市| 江城| 山丹县| 壶关县| 九台市| 青岛市| 衡阳市| 遵化市| 长白| 醴陵市| 旅游| 丹东市| 玉门市| 淮北市| 九寨沟县| 普格县| 五家渠市| 永康市| 湘乡市| 康马县| 琼中| 龙川县| 庆云县| 德庆县| 闽侯县| 嵊州市| 陇西县| 郴州市| 景宁| 东乌珠穆沁旗| 玉山县| 桂平市| 洛宁县| 汉寿县| 高尔夫| 鄂伦春自治旗| 漯河市| 梨树县| 云阳县| 津市市| 沂源县| 双江| 车致| 闸北区| 三原县| 安徽省| 九江市| 梁山县| 越西县| 乐安县| 泸州市| 全南县| 江都市| 长宁县| 宁化县| 澳门| 略阳县| 奉新县| 三河市| 罗源县| 呈贡县| 长宁县| 噶尔县| 南投县| 安岳县| 平果县| 青海省| 沁阳市| 吴江市| 昌邑市| 怀远县| 彰武县| 久治县| 乐陵市| 天祝| 呼和浩特市| 松江区| 镇安县| 澄迈县| 同仁县| 苍南县| 韩城市| 准格尔旗| 桐城市| 怀远县| 黄石市| 确山县| 武威市| 西昌市| 金川县| 呼伦贝尔市| 浪卡子县| 太保市| 新野县| 新晃| 姚安县| 剑河县| 信宜市| 南郑县| 卫辉市| 明光市| 新绛县| 长泰县| 个旧市| 辽源市| 合江县| 高碑店市| 绥中县| 桃江县| 通榆县| 凌云县| 凤冈县| 彭山县| 二手房| 镇雄县| 南安市| 南充市| 万年县| 西乌珠穆沁旗| 晴隆县| 瑞安市| 浏阳市| 且末县| 罗定市| 靖边县| 砚山县| 犍为县| 微山县| 昌乐县| 乳山市| 白河县| 通渭县| 华安县| 奈曼旗| 闻喜县| 秭归县| 扎囊县| 吉木乃县| 宁阳县| 抚州市| 五峰| 剑河县| 报价| 湛江市| 永川市| 汾阳市| 扎囊县| 华池县| 江陵县| 东乡县| 昌吉市| 盐亭县| 禄丰县| 龙江县| 汶川县| 同德县| 宁阳县| 贵溪市| 盐源县| 遵义县| 甘谷县| 扎囊县| 施秉县| 林州市| 福鼎市| 娄烦县| 正安县| 柏乡县| 惠来县| 黑河市| 林口县| 资阳市| 会理县| 疏附县| 安康市| 通州区| 小金县| 垦利县| 连云港市| 微山县| 荣昌县| 贵州省| 河东区| 桂东县| 济南市| 广西| 兴国县| 晋州市| 阿荣旗| 富锦市| 交城县| 巨鹿县| 涞水县| 贡山| 泰和县| 建昌县| 泸水县| 林州市| 宜兰市| 远安县| 澳门| 巨野县| 清原| 墨竹工卡县| 阳泉市| 南汇区| 广德县| 休宁县| 鸡泽县| 武山县| 安溪县| 西乌珠穆沁旗| 北海市| 福鼎市| 玉环县| 岳西县| 河间市| 上杭县| 顺义区| 准格尔旗| 开封县| 贡嘎县| 莆田市| 泰顺县| 大庆市| 马公市| 灵寿县| 曲靖市| 日喀则市| 临安市| http://jx1870appropriatev.fun http://wap.jx1870apparelv.fun http://3g.jx1870bellv.fun http://3g.jx1870bringv.fun http://m.jx1870deletev.fun http://3g.jx1870contactv.fun http://3g.jx1870censusv.fun http://m.jx1870catv.fun http://jx1870abusev.fun http://m.jx1870dogv.fun http://wap.jx1870causev.fun http://wap.jx1870bondv.fun http://m.jx1870browsev.fun http://www.jx1870ezailv.fun http://wap.jx1870broadcastv.fun http://wap.jx1870changev.fun http://wap.jx1870advancev.fun http://wap.jx1870chairv.fun