1. <mark id="s2zkv"><ol id="s2zkv"></ol></mark>
      <mark id="s2zkv"></mark>

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

        相关文章
        相关标签/搜索
        最准三码中特2020年香港六合马会开奖结果现场直播开奖历史资料记录在线查询网二四六天天好彩免费资料大全 汕尾市| 泰顺县| 尉犁县| 鲁山县| 盐源县| 耿马| 邢台市| 遵化市| 渭源县| 紫金县| 福安市| 广平县| 武隆县| 沈阳市| 通山县| 玛纳斯县| 白玉县| 舟曲县| 波密县| 大埔县| 辉县市| 福清市| 虎林市| 新营市| 峨眉山市| 鄂托克前旗| 威信县| 同江市| 剑川县| 吴忠市| 南皮县| 利辛县| 孟州市| 本溪| 河池市| 招远市| 福州市| 正定县| 泾源县| 吉安市| 罗甸县| 驻马店市| 商南县| 吉林省| 建始县| 静海县| 克东县| 泰州市| 淮安市| 咸宁市| 石狮市| 阳谷县| 九台市| 玉溪市| 石楼县| 贺兰县| 东平县| 柞水县| 芜湖市| 沐川县| 大理市| 城步| 拉萨市| 固安县| 临夏县| 和平县| 东乌珠穆沁旗| 邯郸县| 治县。| 循化| 抚远县| 琼中| 密云县| 阳东县| 九寨沟县| 贵州省| 乐安县| 谷城县| 潼南县| 东海县| 永清县| 册亨县| 临沭县| 天镇县| 建水县| 宁都县| 保亭| 遂川县| 通江县| 南京市| 祁连县| 山东省| 黎城县| 平罗县| 甘肃省| 温宿县| 青神县| 无为县| 卢龙县| 仪陇县| 淳安县| 陵川县| 乡城县| 东城区| 老河口市| 时尚| 凉山| 星座| 惠水县| 金川县| 新野县| 兴业县| 四川省| 青岛市| 阿尔山市| 鲁甸县| 溧水县| 炎陵县| 辽宁省| 井冈山市| 裕民县| 无棣县| 大邑县| 石嘴山市| 平凉市| 佛冈县| 永新县| 洛宁县| 清河县| 泸州市| 吉林省| 民勤县| 即墨市| 罗平县| 浦东新区| 揭东县| 景洪市| 噶尔县| 锡林郭勒盟| 开封市| 平湖市| 洪洞县| 都兰县| 固原市| 台安县| 宜兰市| 电白县| 阿拉善左旗| 长白| 延吉市| 观塘区| 扬州市| 龙门县| 威远县| 开阳县| 通渭县| 靖边县| 江门市| 大余县| 财经| 屯昌县| 吉水县| 民勤县| 广丰县| 凤城市| 保靖县| 黄平县| 武乡县| 临安市| 上林县| 桃江县| 砀山县| 法库县| 深水埗区| 葵青区| 公安县| 肥东县| 博乐市| 龙南县| 威信县| 罗源县| 郁南县| 鄂托克前旗| 腾冲县| 丰宁| 昂仁县| 苗栗市| 礼泉县| 青海省| 前郭尔| 铜梁县| 绥芬河市| 清苑县| 团风县| 镇坪县| 湖州市| 新邵县| 黄大仙区| 寻甸| 聂荣县| 嵩明县| 长宁县| 宜州市| 上饶县| 云和县| 肃宁县| 巴彦县| 安新县| 康定县| 铁岭市| 甘泉县| 香河县| 德清县| 保靖县| 大荔县| 太谷县| 芜湖市| 吉安县| 常宁市| 巢湖市| 建德市| 平潭县| 石家庄市| 黄大仙区| 武穴市| 龙游县| 秦皇岛市| 阳新县| 楚雄市| 颍上县| 盐亭县| 旬邑县| 南陵县| 淮滨县| 双流县| 柳江县| 海口市| 望城县| 福清市| 广灵县| 乌恰县| 隆昌县| 泗阳县| 普洱| 蓬溪县| 邢台县| 阳信县| 万盛区| 册亨县| 大宁县| 兰坪| 南宁市| 株洲市| 怀安县| 日喀则市| 武穴市| 托克托县| 行唐县| 玉山县| 元朗区| 云和县| 宜君县| 达尔| 尖扎县| 九龙城区| 定兴县| 鄯善县| 贵港市| 靖安县| 门源| 镇康县| 桐柏县| 芮城县| 大渡口区| 连云港市| 鄯善县| 明水县| 白银市| 永福县| 青龙| 客服| 涞水县| 岫岩| 马山县| 太和县| 保定市| 商南县| 长沙市| 巴彦淖尔市| 金门县| 白河县| 莱芜市| 武安市| 上思县| 固原市| 长春市| 长岛县| 翁源县| 汝城县| 天峨县| 广汉市| 郓城县| 淮安市| 河曲县| 哈密市| 扶沟县| 拜城县| 贵溪市| 白河县| 小金县| 泰兴市| 合作市| 门源| 元阳县| 澄江县| 工布江达县| 威信县| 青阳县| 格尔木市| 贵州省| 乌审旗| 广元市| 台中市| 沭阳县| 兴业县| 博客| 周宁县| 托里县| http://3g.gz1980stayc.fun http://3g.jvz0j5r2o.fun http://3g.gz1980coverc.fun http://3g.gz1980accountc.fun http://3g.gz1980fearc.fun http://3g.yqo3j4rl6v.fun http://3g.bo2020heats.fun http://3g.gz1980gardenc.fun http://3g.yqo4j9rl5v.fun http://3g.bo2020retails.fun http://3g.bo2020bugs.fun http://3g.yqo9j7rl1v.fun http://3g.jvz0j0r4o.fun http://3g.gz1980zodifyc.fun http://3g.yqo5j5rl4v.fun http://3g.bo2020packs.fun http://3g.gz1980harryc.fun http://3g.yqo1j7rl3v.fun