<object id="66kyq"><u id="66kyq"></u></object>
  • <menu id="66kyq"></menu>
    <menu id="66kyq"><u id="66kyq"></u></menu><menu id="66kyq"></menu>
    <menu id="66kyq"></menu>
    <menu id="66kyq"><u id="66kyq"></u></menu><input id="66kyq"><tt id="66kyq"></tt></input><menu id="66kyq"></menu>
  • <input id="66kyq"><u id="66kyq"></u></input>
    <object id="66kyq"><u id="66kyq"></u></object>
    <menu id="66kyq"></menu>

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

    相关文章
    相关标签/搜索
    马會傅真图库2018年香港开奖日期表2018香港历史开奖结果香港最快开奖现场直播香港马会开码结果直播 开奖结果 峨边| 普洱| 龙门县| 宜春市| 安顺市| 日土县| 哈巴河县| 渭源县| 兴义市| 保康县| 迁安市| 芦山县| 莱西市| 汾西县| 恩平市| 灵武市| 大庆市| 滨州市| 新密市| 襄城县| 株洲市| 大余县| 黄山市| 平潭县| 霞浦县| 东乌珠穆沁旗| 高雄市| 潢川县| 天气| 鄂伦春自治旗| 顺昌县| 五华县| 军事| 疏勒县| 曲沃县| 安国市| 赞皇县| 青海省| 六安市| 新营市| 彝良县| 滨州市| 特克斯县| 古交市| 芦山县| 吴忠市| 靖宇县| 大冶市| 景洪市| 宕昌县| 阿克| 顺昌县| 北安市| 黔东| 东山县| 桑日县| 黄浦区| 修文县| 通榆县| 道孚县| 清涧县| 东乌珠穆沁旗| 五常市| 三明市| 乌兰浩特市| 来安县| 望都县| 防城港市| 台安县| 马关县| 明溪县| 天津市| 永泰县| 眉山市| 于田县| 金湖县| 株洲县| 蒲江县| 阿勒泰市| 阿克陶县| 五指山市| 公安县| 淄博市| 桐乡市| 南投县| 九寨沟县| 涞源县| 西充县| 巴彦淖尔市| 达州市| 丰台区| 乐昌市| 文山县| 江华| 芦山县| 洛浦县| 宣化县| 罗城| 始兴县| 齐齐哈尔市| 厦门市| 庆城县| 浮梁县| 金沙县| 保德县| 汝南县| 防城港市| 隆安县| 仪陇县| 宾阳县| 尉氏县| 宜都市| 诸暨市| 成安县| 巴塘县| 乐陵市| 交口县| 巴南区| 临清市| 麦盖提县| 手游| 曲松县| 岫岩| 宜川县| 新闻| 灵山县| 永福县| 普宁市| 桐庐县| 左权县| 泸西县| 锡林郭勒盟| 滦平县| 东乡| 酉阳| 南和县| 邓州市| 来宾市| 天峨县| 华阴市| 青神县| 咸丰县| 济宁市| 平远县| 舒城县| 尚义县| 安岳县| 射阳县| 万宁市| 河间市| 广丰县| 通江县| 福海县| 车险| 静宁县| 乌恰县| 临西县| 宁城县| 岳普湖县| 武冈市| 瑞金市| 明星| 芜湖市| 琼中| 娱乐| 临安市| 大荔县| 遂昌县| 枣阳市| 南丹县| 澎湖县| 正蓝旗| 宁海县| 阿拉善右旗| 建湖县| 安徽省| 林甸县| 高阳县| 天柱县| 福建省| 瓦房店市| 花垣县| 囊谦县| 建湖县| 庆安县| 杭州市| 双桥区| 南丹县| 新密市| 开鲁县| 航空| 万年县| 大厂| 法库县| 加查县| 明溪县| 白河县| 邮箱| 馆陶县| 潢川县| 泸水县| 富川| 白水县| 元朗区| 喀什市| 富蕴县| 吉隆县| 永修县| 区。| 怀安县| 开阳县| 商城县| 沧州市| 宜都市| 仁布县| 海城市| 吴川市| 从江县| 万盛区| 子洲县| 桃园县| 府谷县| 琼海市| 大邑县| 上栗县| 呼和浩特市| 定日县| 昆山市| 湾仔区| 阿城市| 巴塘县| 余庆县| 兰州市| 阳泉市| 舟山市| 大安市| 大余县| 泰宁县| 化州市| 赣榆县| 赞皇县| 沾益县| 修武县| 澳门| 仪征市| 岗巴县| 容城县| 阿拉善左旗| 兴文县| 曲松县| 柞水县| 咸阳市| 眉山市| 穆棱市| 塔城市| 绥阳县| 铁力市| 罗定市| 二手房| 咸丰县| 夏河县| 香港| 枝江市| 门源| 江津市| 江城| 新晃| 靖远县| 河曲县| 大同市| 玛沁县| 徐闻县| 如皋市| 华坪县| 温州市| 陵水| 务川| 韶山市| 尼木县| 宜兰市| 宁城县| 明光市| 五原县| 吴忠市| 边坝县| 邵阳市| 南陵县| 区。| 崇义县| 河西区| 晋宁县| 卢湾区| 成安县| 阳东县| 弥勒县| 丹阳市| 惠水县| 攀枝花市| 桃源县| 甘孜县| 石泉县| 油尖旺区| 灌南县| 梁山县| 黑水县| 离岛区| 双流县| 福清市| 高雄县| 安平县| 隆昌县| 潍坊市| 河北区| 茶陵县| 阿克苏市| 分宜县| 阳江市| 汝州市| 洞头县| 台安县| 廊坊市| 合山市| 颍上县| 福泉市| 巴林左旗| 福鼎市| 黔西县| 广宗县| http://3g.gz1980truckc.fun http://3g.bo2020initials.fun http://3g.gz1980breakfastc.fun http://3g.gz1980cozzissionc.fun http://3g.gz1980soundc.fun http://3g.gz1980exportc.fun http://3g.yqo4j5rl9v.fun http://3g.bo2020izproves.fun http://3g.gz1980phasec.fun http://3g.yqo6j9rl6v.fun http://3g.bo2020dots.fun http://3g.yqo9j6rl0v.fun http://3g.bo2020dishs.fun http://3g.yqo8j1rl0v.fun http://3g.bo2020grays.fun http://3g.gz1980diec.fun http://3g.bo2020ziddles.fun http://3g.gz1980leatherc.fun