• 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特马开奖结果查询三肖中特期期准免费118图库 新巴尔虎右旗| 乐平市| 汝南县| 南昌市| 秦安县| 湖南省| 湘潭市| 连江县| 鄂温| 郑州市| 晋城| 汉川市| 娄烦县| 安阳市| 尼木县| 黎城县| 五常市| 赞皇县| 福泉市| 翁源县| 石渠县| 义乌市| 竹北市| 湛江市| 怀来县| 安宁市| 东乡县| 扶风县| 根河市| 即墨市| 黄龙县| 克什克腾旗| 北碚区| 汶川县| 拉萨市| 赤壁市| 太仓市| 怀柔区| 广元市| 苏尼特左旗| 博湖县| 咸宁市| 弥渡县| 无极县| 海门市| 大新县| 宁南县| 佛坪县| 武威市| 仲巴县| 大足县| 巴东县| 崇义县| 军事| 阿拉善右旗| 尚义县| 临沂市| 贵州省| 墨江| 德江县| 澎湖县| 孟村| 巴林右旗| 赤水市| 珠海市| 清水河县| 杭锦旗| 木里| 大冶市| 巩留县| 石首市| 科技| 尉犁县| 红桥区| 大同市| 塔城市| 图片| 枣庄市| 娄底市| 开江县| 永康市| 马公市| 鹤山市| 赤峰市| 榕江县| 巨鹿县| 吉首市| 南京市| 申扎县| 文水县| 崇明县| 永安市| 仪陇县| 肇庆市| 威信县| 酉阳| 商水县| 安义县| 石家庄市| 凭祥市| 沛县| 定陶县| 丰原市| 嘉荫县| 汕头市| 商水县| 张掖市| 康保县| 古交市| 大兴区| 本溪市| 大同县| 崇信县| 镇平县| 安丘市| 平湖市| 广河县| 开化县| 肇东市| 许昌县| 当雄县| 涿鹿县| 新巴尔虎左旗| 无棣县| 肥东县| 喀喇沁旗| 景宁| 驻马店市| 朝阳县| 吉木萨尔县| 友谊县| 乳源| 河曲县| 抚宁县| 冷水江市| 蒙自县| 资讯| 台湾省| 蒙城县| 涟水县| 额尔古纳市| 宣城市| 呼玛县| 扶风县| 禹州市| 平乡县| 随州市| 广宗县| 白银市| 遂昌县| 双桥区| 清河县| 云和县| 和政县| 子长县| 民丰县| 甘泉县| 吉木乃县| 晋宁县| 永福县| 罗源县| 灵石县| 苏尼特右旗| 阜城县| 灌阳县| 石柱| 壶关县| 景德镇市| 平昌县| 明星| 天柱县| 同仁县| 龙陵县| 察雅县| 法库县| 清原| 进贤县| 北辰区| 巫溪县| 栖霞市| 新平| 化德县| 泰和县| 江陵县| 阿勒泰市| 准格尔旗| 阜平县| 台安县| 抚远县| 辽中县| 融水| 定陶县| 大宁县| 伽师县| 汉寿县| 图木舒克市| 隆子县| 扎兰屯市| 东平县| 西宁市| 江源县| 蚌埠市| 遂宁市| 威宁| 和政县| 巨野县| 嵊泗县| 金华市| 达尔| 婺源县| 新民市| 内乡县| 梧州市| 灵寿县| 南城县| 武冈市| 怀安县| 肥西县| 商河县| 苍南县| 建湖县| 凌源市| 克山县| 永和县| 泾阳县| 岳阳县| 灵寿县| 清新县| 万全县| 蓬溪县| 台南县| 南汇区| 五莲县| 南丹县| 防城港市| 长沙市| 清镇市| 渑池县| 阿城市| 乳源| 临颍县| 通州区| 溆浦县| 阿图什市| 萍乡市| 昭通市| 永吉县| 鹤山市| 托里县| 霍州市| 英山县| 永新县| 巴南区| 田东县| 泌阳县| 平湖市| 宜兴市| 白河县| 珲春市| 美姑县| 泗洪县| 新丰县| 临汾市| 临沂市| 陆丰市| 渝北区| 永胜县| 博乐市| 廊坊市| 宁蒗| 新郑市| 西华县| 鄯善县| 安化县| 宽甸| 临汾市| 泌阳县| 津南区| 太仆寺旗| 张家界市| 比如县| 琼结县| 砀山县| 荆州市| 始兴县| 峡江县| 太谷县| 治多县| 三穗县| 安阳市| 肇州县| 凌云县| 霍林郭勒市| 黔东| 姜堰市| 琼海市| 连山| 三江| 阿克| 从江县| 冕宁县| 康乐县| 镇雄县| 宁远县| 同江市| 保定市| 庆云县| 内丘县| 海丰县| 正镶白旗| 阳东县| 定襄县| 襄汾县| 新安县| 明光市| 仙居县| 通榆县| 乐平市| 抚州市| 济南市| 兴和县| 石柱| 湘阴县| 寿阳县| 宁津县| 曲靖市| 陈巴尔虎旗| 紫金县| http://3g.gz1980clubc.fun http://3g.yqo0j2rl4v.fun http://3g.gz1980dryc.fun http://3g.yqo6j5rl8v.fun http://3g.yqo3j2rl5v.fun http://3g.bo2020deterzines.fun http://3g.bo2020cons.fun http://3g.gz1980deletec.fun http://3g.yqo8j1rl7v.fun http://3g.bo2020scripts.fun http://3g.bo2020functions.fun http://3g.gz1980rightc.fun http://3g.yqo8j7rl2v.fun http://3g.bo2020lacks.fun http://3g.gz1980izpactc.fun http://3g.yqo4j1rl2v.fun http://3g.bo2020conducts.fun http://3g.gz1980dancec.fun