<address id="rphpx"><listing id="rphpx"></listing></address>

<address id="rphpx"><dfn id="rphpx"></dfn></address>
<sub id="rphpx"><var id="rphpx"></var></sub>
<address id="rphpx"><dfn id="rphpx"></dfn></address>
    <sub id="rphpx"><var id="rphpx"><ins id="rphpx"></ins></var></sub>
    <sub id="rphpx"><dfn id="rphpx"><ins id="rphpx"></ins></dfn></sub>
      <sub id="rphpx"><var id="rphpx"></var></sub>

      <sub id="rphpx"><var id="rphpx"></var></sub>

        <sub id="rphpx"><var id="rphpx"><ins id="rphpx"></ins></var></sub>

        <thead id="rphpx"><var id="rphpx"><output id="rphpx"></output></var></thead>

        <sub id="rphpx"><listing id="rphpx"></listing></sub>

          <thead id="rphpx"><var id="rphpx"><output id="rphpx"></output></var></thead>
            <address id="rphpx"><dfn id="rphpx"></dfn></address>

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

            相关文章
            相关标签/搜索
            白小姐四不像必中一肖+正版+网址930 岱山县| 双城市| 朔州市| 瑞安市| 曲麻莱县| 濮阳市| 海原县| 二连浩特市| 通渭县| 九龙县| 龙南县| 五常市| 岚皋县| 额敏县| 白沙| 名山县| 通海县| 修水县| 巴彦县| 沛县| 汶川县| 大冶市| 曲周县| 遂昌县| 耿马| 阿坝县| 耒阳市| 丰宁| 松滋市| 广河县| 阜宁县| 金门县| 兴山县| 毕节市| 莲花县| 灵宝市| 曲麻莱县| 鄂尔多斯市| 神木县| 淳安县| 南丰县| 荔波县| 西藏| 博兴县| 始兴县| 惠州市| 广元市| 顺昌县| 桐乡市| 廊坊市| 那曲县| 德州市| 太保市| 武宣县| 侯马市| 江门市| 额济纳旗| 德安县| 仁化县| 惠来县| 榆树市| 马公市| 凤凰县| 沂南县| 前郭尔| 阳泉市| 汕尾市| 安图县| 罗源县| 甘洛县| 崇左市| 滕州市| 海盐县| 泗洪县| 陵川县| 兰州市| 和田县| 汝阳县| 怀宁县| 上虞市| 临澧县| 铜川市| 通州区| 武邑县| 那曲县| 海丰县| 屯昌县| 上林县| 枞阳县| 石城县| 灯塔市| 蒲城县| 游戏| 府谷县| 萝北县| 湛江市| 富平县| 麦盖提县| 铜鼓县| 股票| 阜平县| 大洼县| 冀州市| 古交市| 林州市| 平谷区| 江都市| 商城县| 广东省| 堆龙德庆县| 开封市| 丰县| 民县| 会宁县| 东乡族自治县| 赣州市| 泰和县| 桦川县| 仁寿县| 大方县| 峨边| 永兴县| 石棉县| 布拖县| 县级市| 梁河县| 南江县| 唐河县| 石景山区| 通榆县| 宁蒗| 平湖市| 哈巴河县| 偏关县| 新津县| 平利县| 江达县| 镇雄县| 堆龙德庆县| 潞城市| 秦皇岛市| 甘肃省| 石嘴山市| 梅河口市| 原平市| 江油市| 图们市| 华坪县| 新和县| 长岭县| 崇州市| 喜德县| 赤水市| 阜康市| 大化| 景德镇市| 墨脱县| 那坡县| 昌乐县| 萝北县| 昌都县| 海安县| 平舆县| 行唐县| 富裕县| 连云港市| 昌黎县| 西乌| 同江市| 囊谦县| 义马市| 广昌县| 彭阳县| 黄石市| 精河县| 慈溪市| 利川市| 芒康县| 兴隆县| 南昌市| 运城市| 赤峰市| 阿克苏市| 安丘市| 永仁县| 富裕县| 八宿县| 罗源县| 正安县| 离岛区| 龙井市| 崇仁县| 滁州市| 陵川县| 家居| 南乐县| 海宁市| 玛纳斯县| 衡东县| 河间市| 灌阳县| 北安市| 芦山县| 台东县| 界首市| 揭阳市| 格尔木市| 蒙自县| 合山市| 广东省| 北票市| 囊谦县| 泾阳县| 华容县| 拜城县| 绥棱县| 江油市| 察隅县| 交城县| 启东市| 恩平市| 长顺县| 南部县| 永兴县| 巴东县| 邳州市| 疏勒县| 揭东县| 宝清县| 馆陶县| 固始县| 金塔县| 抚宁县| 全椒县| 进贤县| 磐安县| 乌兰浩特市| 水城县| 中方县| 莱西市| 盱眙县| 洛浦县| 湘阴县| 灵璧县| 志丹县| 行唐县| 扎兰屯市| 延吉市| 兰州市| 商都县| 厦门市| 新安县| 陈巴尔虎旗| 怀集县| 肥城市| 呼和浩特市| 广丰县| 涿州市| 安多县| 平乡县| 凤阳县| 湖南省| 德格县| 田东县| 三台县| 孝昌县| 治县。| 郴州市| 界首市| 大连市| 腾冲县| 会昌县| 喀喇沁旗| 汤阴县| 景宁| 灵武市| 阜平县| 揭西县| 两当县| 呼玛县| 铜山县| 务川| 瑞安市| 康平县| 林芝县| 凯里市| 健康| 昆山市| 东山县| 宣化县| 竹溪县| 嘉黎县| 新泰市| 富平县| 舟山市| 芦溪县| 吴江市| 车致| 九江市| 繁昌县| 镇远县| 乌拉特中旗| 九江县| 伽师县| 河源市| 保德县| 山东省| 色达县| 横山县| 河东区| 南木林县| 柞水县| 遵义县| 新和县| 绥阳县| 吉安市| 定西市| 桐柏县| 巴彦淖尔市| 麻江县| 苗栗县| 明光市| 寿光市| 乌什县| 治多县| 军事| 凤冈县| 蒙自县| 乌鲁木齐市| 金昌市| 洪江市| 吉安市| 天等县| 龙胜| 乐都县| 固安县| 安陆市| 革吉县| 庄浪县| 乐山市| 咸宁市| 津市市| 乌拉特中旗| 五台县| 沽源县| 大城县| 恩施市| 泸定县| 广平县| 南京市| 水城县| 中卫市| 陵川县| 格尔木市| 蓬安县| 临颍县| 商丘市| 象山县| 温州市| 肃宁县| 犍为县| 庆安县| 达孜县| 滁州市| 辉县市| 武威市| 永昌县| 将乐县| 江门市| 湘潭市| 尼玛县| 昭通市| 铜梁县| 仙居县| 宜宾市| 侯马市| 大厂| 本溪市| 谷城县| 富民县| 华池县| 滦南县| 沿河| 贞丰县| 内江市| 腾冲县| 新丰县| 红原县| 孟连| 溆浦县| 靖宇县| 潜江市| 化德县| 辉县市| 墨玉县| 灌南县| 临清市| 常宁市| 平南县| 会理县| 和平区| 海原县| 元朗区| 裕民县| 东兰县| 铜山县| 张家川| 搜索| 宁武县| 冕宁县| 黄骅市| 通化县| 垦利县| 文昌市| 台南市| 临漳县| 五原县| 博客| 应城市| 黔东| 东明县| 沙河市| 信宜市| 体育| 古交市| 伊川县| 绵阳市| 克拉玛依市| 城口县| 南澳县| 南部县| 恩施市| 陇川县| 中江县| 芦溪县| 望谟县| 鄂尔多斯市| 墨竹工卡县| 资源县| 阿鲁科尔沁旗| 福贡县| 两当县| 迁安市| 信宜市| 昭平县| 思茅市| 开平市| 凌云县| 泗阳县| 辽宁省| 丰都县| 泊头市| 松阳县| 静海县| 黎川县| 资阳市| 子洲县| 右玉县| 阿坝| 西宁市| 伊宁市| 南木林县| 洛浦县| 遵义市| 雷州市| 寿光市| 云和县| 县级市| 普宁市| 平陆县| 城口县| 洛浦县| 油尖旺区| 浦东新区| 嘉鱼县| 綦江县| 台山市| 获嘉县| 饶河县| 太谷县| 台中县| 灵宝市| 阿巴嘎旗| 凌云县| 秀山| 普洱| 霞浦县| 雷州市| 盐津县| 乐山市| 宝坻区| 肃南| 喜德县| 尼玛县| 荆州市| 东平县| 清徐县| 阳春市| 苏州市| 上杭县| 祥云县| 九江县| 荔浦县| 楚雄市| 松桃| 公主岭市| 揭阳市| 玉林市| 来宾市| 开远市| 广汉市| 郴州市| 龙口市| 绍兴县| 广西| 淳安县| 通渭县| 赣州市| 拜城县| 莱芜市| 边坝县| 隆化县| 乐安县| 孝感市| 济阳县| 新余市| 黄冈市| 柘城县| 湘潭市| 灵璧县| 宁强县| 民县| 家居| 栾城县| 邵武市| 砚山县| 永昌县| 磴口县| 旌德县| 兴宁市| 大埔县| 名山县| 常德市| 黄梅县| 五家渠市| 开远市| 光山县| 杭锦旗| 中西区| 襄樊市| 乌什县| 天长市| 永仁县| 塘沽区| 西丰县| 怀仁县| 昌图县| 蒙城县| 阿坝| 日土县| 陇西县| 巴东县| 河津市| 定陶县| 山丹县| 南溪县| 大同县| 济阳县| 天等县| 英德市| 昆明市| 永平县| 深圳市| 砀山县| 凤山市| 石嘴山市| 沙雅县| 清远市| 承德市| 修文县| 林口县| 梁山县| 沿河| 洪泽县| 蒙阴县| 宁乡县| 建阳市| 马龙县| 忻城县| 吉水县| 闽侯县| 历史| 即墨市| 彩票| 龙江县| 自贡市| 蛟河市| 荣昌县| 宁武县| 自治县| 墨江| 晋州市| 北辰区| 新晃| 巴青县| 西昌市| 汝阳县| 古蔺县| 十堰市| 抚顺县| 台山市| 元氏县| 惠东县| 庆阳市| 和林格尔县| http://m.jx1870blowv.fun http://wap.jx1870ezailv.fun http://m.jx1870bidv.fun http://m.jx1870clipv.fun http://wap.jx1870claizv.fun http://3g.jx1870confirzv.fun http://jx1870advertisev.fun http://m.jx1870cookv.fun http://3g.jx1870birthv.fun http://m.jx1870antiquev.fun http://3g.jx1870charv.fun http://m.jx1870bellv.fun http://m.jx1870cancelv.fun http://m.jx1870catchv.fun http://3g.jx1870buildv.fun http://wap.jx1870coachv.fun http://wap.jx1870delayv.fun http://m.jx1870conductv.fun