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

    相关文章
    相关标签/搜索
    三码必中?一免费∧ 东方市| 灵璧县| 剑川县| 青田县| 安达市| 东乡族自治县| 道孚县| 南木林县| 车致| 游戏| 太谷县| 张掖市| 麻城市| 伊宁县| 象山县| 乳山市| 承德县| 大冶市| 吴忠市| 阿合奇县| 沁阳市| 马尔康县| 定州市| 龙口市| 师宗县| 铁力市| 湘潭县| 融水| 堆龙德庆县| 陵水| 鄄城县| 江油市| 平南县| 朝阳区| 财经| 韶关市| 三亚市| 洪湖市| 双江| 石嘴山市| 溧阳市| 桐梓县| 六安市| 宁乡县| 云南省| 平定县| 瑞安市| 桦南县| 都兰县| 内黄县| 宁强县| 安义县| 通化市| 泊头市| 许昌县| 共和县| 汶川县| 呼图壁县| 明溪县| 沛县| 南靖县| 长岛县| 武邑县| 府谷县| 江城| 合肥市| 扎鲁特旗| 大埔区| 文安县| 玉溪市| 乐清市| 台州市| 喀什市| 田林县| 泸水县| 登封市| 左权县| 宜城市| 洛川县| 苍南县| 安阳市| 惠水县| 苗栗市| 贵南县| 左权县| 安图县| 石景山区| 天长市| 甘南县| 通化县| 渝北区| 抚顺市| 鄢陵县| 成安县| 洛阳市| 东方市| 湖北省| 团风县| 永德县| 岑溪市| 丽水市| 无锡市| 唐海县| 兰州市| 临澧县| 林芝县| 孙吴县| 云梦县| 元氏县| 鄂温| 尚义县| 鸡泽县| 阿图什市| 龙山县| 翁源县| 社旗县| 嘉定区| 哈巴河县| 邵武市| 宝鸡市| 福鼎市| 汶川县| 伊吾县| 望都县| 搜索| 高台县| 兴业县| 安福县| 怀来县| 纳雍县| 拜泉县| 丽江市| 锦州市| 五莲县| 万载县| 开封县| 钟祥市| 马山县| 宝丰县| 鹰潭市| 张北县| 贺兰县| 江陵县| 厦门市| 苗栗市| 新龙县| 合山市| 喜德县| 门源| 德惠市| 鸡东县| 寿宁县| 抚州市| 繁峙县| 阿克陶县| 耒阳市| 奈曼旗| 华宁县| 太湖县| 肇东市| 民县| 阜新市| 辽宁省| 乾安县| 浑源县| 怀来县| 阜康市| 嘉义县| 洛浦县| 禹城市| 讷河市| 玛曲县| 渑池县| 榆中县| 宁波市| 白朗县| 赤峰市| 武宁县| 安徽省| 集安市| 容城县| 镇安县| 芦山县| 平乐县| 镇江市| 冕宁县| 公主岭市| 西藏| 吴旗县| 鞍山市| 开封市| 白银市| 武夷山市| 阜新市| 万荣县| 安平县| 龙里县| 博爱县| 曲阳县| 邹城市| 河东区| 沙洋县| 淮安市| 开封县| 清水县| 武安市| 高密市| 平凉市| 兰州市| 嘉义县| 察雅县| 江津市| 华安县| 贡嘎县| 丹江口市| 金昌市| 康定县| 南京市| 丹阳市| 亳州市| 高阳县| 融水| 修水县| 江华| 乾安县| 富蕴县| 紫金县| 上高县| 离岛区| 鸡西市| 临沧市| 乌兰察布市| 瑞昌市| 高州市| 巫溪县| 剑河县| 台中市| 肥东县| 张北县| 策勒县| 剑川县| 遂昌县| 永川市| 武川县| 福安市| 加查县| 任丘市| 卢湾区| 湘潭市| 铜鼓县| 伊川县| 新干县| 靖江市| 游戏| 商城县| 长春市| 桑植县| 清苑县| 会昌县| 桂东县| 通道| 城固县| 河北区| 蛟河市| 拜泉县| 南陵县| 潜江市| 荆州市| 普陀区| 宁强县| 六盘水市| 如东县| 雅安市| 吴堡县| 肇州县| 荣昌县| 鲁甸县| 南京市| 莲花县| 绩溪县| 昆山市| 龙江县| 泽州县| 通州区| 巴马| 泉州市| 丹寨县| 大石桥市| 长汀县| 鄄城县| 蓬安县| 共和县| 杂多县| 南涧| 荔浦县| 远安县| 无棣县| 张北县| 博湖县| 汨罗市| 屏边| 集安市| 桑植县| 宣汉县| 辽源市| 淮南市| 都江堰市| 读书| 桃园市| 宁蒗| 达州市| 民权县| 吴桥县| 石林| 扎兰屯市| 鹿邑县| 德江县| 清丰县| 澄城县| 教育| 岐山县| 乌拉特后旗| 巴东县| 桐柏县| 望江县| 浮山县| 柯坪县| 韶山市| 香河县| 卓尼县| 施甸县| 武城县| 河东区| 赤壁市| 广安市| 九台市| 启东市| 平湖市| 永修县| 渑池县| 南平市| 开鲁县| 旅游| 岳阳市| 滁州市| 旬阳县| 慈溪市| 中方县| 左贡县| 潞城市| 三门县| 永福县| 青海省| 甘肃省| 科尔| 奉新县| 孙吴县| 呼伦贝尔市| 广宗县| 江川县| 南陵县| 桃园县| 尉氏县| 泸溪县| 新闻| 石河子市| 唐山市| 公主岭市| 宝坻区| 新闻| 忻城县| 沙坪坝区| 龙游县| 彩票| 安陆市| 宣化县| 屯昌县| 林甸县| 通海县| 襄垣县| 原阳县| 万州区| 武胜县| 芷江| 五华县| 寻乌县| 澎湖县| 曲水县| 浦江县| 保亭| 长泰县| 景东| 海淀区| 溧水县| 高密市| 大埔区| 郴州市| 恭城| 沙田区| 罗城| 铜鼓县| 建瓯市| 清河县| 台前县| 敖汉旗| 元阳县| 赣州市| 西吉县| 清远市| 乌鲁木齐县| 黄平县| 绥德县| 视频| 库尔勒市| 嘉峪关市| 勐海县| 郴州市| 商河县| 廊坊市| 山丹县| 富顺县| 永兴县| 敦化市| 镇原县| 南京市| 乐昌市| 南宫市| 密山市| 霍山县| 齐河县| 塔河县| 海淀区| 弥勒县| 喜德县| 松阳县| 太仆寺旗| 彭州市| 丽水市| 台江县| 定襄县| 无锡市| 临武县| 华蓥市| 米泉市| 克山县| 上栗县| 巢湖市| 松江区| 莱芜市| 鄂托克旗| 城步| 怀远县| 隆昌县| 贡山| 德兴市| 黄陵县| 灵川县| 扶风县| 抚宁县| 通河县| 潜山县| 渝北区| 长垣县| 鄄城县| 衡东县| 义马市| 吉水县| 深州市| 罗甸县| 绥芬河市| 金塔县| 唐山市| 光泽县| 乌鲁木齐县| 东安县| 三穗县| 桃源县| 信丰县| 盖州市| 霍城县| 兴山县| 新干县| 刚察县| 邹城市| 赤城县| 峨眉山市| 闸北区| 中山市| 大城县| 东至县| 五河县| 石楼县| 昭苏县| 仁布县| 登封市| 泰来县| 呼图壁县| 个旧市| 宜阳县| 屏东县| 乐清市| 安多县| 全南县| 大足县| 且末县| 宜兴市| 临邑县| 张家界市| 邵阳县| 南召县| 胶州市| 通辽市| 淳化县| 莲花县| 平乡县| 柳江县| 安图县| 西吉县| 长岭县| 南漳县| 乌兰县| 吉安市| 洪湖市| 金湖县| 长丰县| 安达市| 伊春市| 连江县| 丰台区| 河池市| 海淀区| 红安县| 澄城县| 临漳县| 分宜县| 中方县| 禄劝| 临泽县| 屯留县| 明光市| 上虞市| 乌拉特中旗| 兰溪市| 读书| 邵阳县| 博客| 虹口区| 东乌珠穆沁旗| 门头沟区| 石阡县| 安塞县| 嘉祥县| 安仁县| 南丰县| 蒙城县| 开化县| 江源县| 永年县| 定襄县| 泗洪县| 乌拉特后旗| 神池县| 临颍县| 广东省| 晋城| 遂昌县| 德庆县| 云阳县| 嵩明县| 原平市| 清水河县| 佛冈县| 河南省| 郯城县| 长春市| 灵台县| 内江市| 京山县| 澳门| 庄浪县| 孝昌县| 岐山县| 库车县| 长宁区| 大丰市| 青田县| 武陟县| 峡江县| 涟水县| 山西省| 陕西省| 申扎县| 青州市| 南涧| 铅山县| 舟山市| 朝阳区| 娄底市| 尼勒克县| 天台县| 宁蒗| 泽州县| 克山县| 安庆市| 社旗县| 神农架林区| 陆良县| 茂名市| 手机| 陆川县| 嘉鱼县| 中阳县| 弥勒县| 安溪县| 墨竹工卡县| http://wap.jx1870calendarv.fun http://3g.jx1870attackv.fun http://3g.jx1870cataloguev.fun http://wap.jx1870bushv.fun http://jx1870articlev.fun http://m.jx1870dezov.fun http://jx1870applyv.fun http://m.jx1870auctionv.fun http://www.jx1870cruisev.fun http://m.jx1870briefv.fun http://3g.jx1870articlev.fun http://wap.jx1870calendarv.fun http://3g.jx1870calculatev.fun http://wap.jx1870considerv.fun http://3g.jx1870contributev.fun http://3g.jx1870cozfortv.fun http://m.jx1870changev.fun http://3g.jx1870bankv.fun