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

    相关文章
    相关标签/搜索
    四肖中特期期準王中王资料大全枓大全app下载-王中王资料大全枓大全开奖手机版 阿城市| 尼玛县| 鱼台县| 临海市| 余庆县| 元朗区| 吉木乃县| 吉安市| 桦南县| 崇文区| 大同县| 什邡市| 石狮市| 拉萨市| 卢湾区| 尤溪县| 麻城市| 丰都县| 武强县| 淄博市| 大悟县| 贞丰县| 仁化县| 湖口县| 武平县| 滦南县| 高陵县| 长武县| 神农架林区| 余姚市| 攀枝花市| 淅川县| 台东县| 万安县| 元朗区| 河北区| 沧州市| 泌阳县| 清远市| 青神县| 沂南县| 翁牛特旗| 潼南县| 江源县| 湘阴县| 石城县| 太白县| 白沙| 西安市| 印江| 东兰县| 阆中市| 会东县| 云阳县| 温宿县| 深圳市| 天气| 杭锦旗| 宣恩县| 阳曲县| 淮阳县| 襄汾县| 诸暨市| 黄陵县| 曲沃县| 灵石县| 司法| 黔江区| 武汉市| 广昌县| 安平县| 沙湾县| 汝城县| 西乌| 哈密市| 青州市| 祥云县| 土默特右旗| 靖远县| 萝北县| 新龙县| 泽普县| 固阳县| 晋中市| 高邑县| 泗洪县| 正蓝旗| 竹北市| 桂东县| 北京市| 仙游县| 新龙县| 沁源县| 临朐县| 洱源县| 密云县| 清丰县| 耒阳市| 永定县| 双鸭山市| 呼和浩特市| 永定县| 长乐市| 鸡东县| 高陵县| 年辖:市辖区| 辰溪县| 江山市| 班戈县| 孝义市| 乐安县| 会泽县| 阜新市| 绥化市| 全椒县| 义乌市| 顺义区| 壶关县| 侯马市| 泾阳县| 偃师市| 无为县| 江孜县| 临桂县| 夏津县| 柯坪县| 同江市| 兴海县| 五原县| 闸北区| 云和县| 郁南县| 重庆市| 龙门县| 睢宁县| 罗城| 禹城市| 巴林左旗| 开封市| 拜城县| 盐城市| 宜州市| 萨嘎县| 冀州市| 河津市| 玉山县| 北流市| 曲靖市| 合阳县| 梁平县| 赤壁市| 溧水县| 普洱| 南昌县| 清河县| 饶平县| 冀州市| 舞钢市| 瑞丽市| 隆尧县| 江西省| 县级市| 江城| 子洲县| 洛川县| 正宁县| 呈贡县| 新龙县| 修文县| 保康县| 丰县| 禄丰县| 颍上县| 湟源县| 黄浦区| 潞西市| 白城市| 会泽县| 察哈| 福海县| 库尔勒市| 金坛市| 扶余县| 兴城市| 乐东| 洪泽县| 石狮市| 绩溪县| 山东| 建昌县| 喀什市| 龙江县| 双峰县| 天祝| 怀化市| 灵台县| 宁河县| 疏附县| 丹寨县| 波密县| 白河县| 府谷县| 琼海市| 广饶县| 怀仁县| 什邡市| 舒兰市| 平乐县| 赤峰市| 清新县| 中西区| 华安县| 鹤峰县| 黔西县| 哈密市| 芮城县| 东丰县| 永和县| 隆尧县| 班玛县| 潮安县| 诸城市| 四平市| 美姑县| 泽州县| 湘潭市| 石林| 新闻| 阜新市| 临清市| 灵川县| 巴青县| 定西市| 青海省| 鹤庆县| 隆昌县| 曲靖市| 眉山市| 洛阳市| 浦城县| 循化| 沛县| 东源县| 阿拉善盟| 清远市| 西盟| 大城县| 咸阳市| 阿荣旗| 霞浦县| 宁明县| 安岳县| 辰溪县| 日照市| 江阴市| 东港市| 八宿县| 张家港市| 贺兰县| 宁陵县| 专栏| 奈曼旗| 尤溪县| 济宁市| 北碚区| 志丹县| 康保县| 临安市| 新密市| 北海市| 临澧县| 鄱阳县| 尉氏县| 夏邑县| 北安市| 焉耆| 清苑县| 昌宁县| 遂昌县| 武隆县| 股票| 嘉荫县| 永州市| 秦安县| 孟连| 五家渠市| 彭阳县| 稻城县| 乐昌市| 克山县| 大荔县| 岳池县| 灵山县| 清水河县| 兴仁县| 安庆市| 龙里县| 塘沽区| 昌邑市| 库尔勒市| 老河口市| 黄陵县| 乌海市| 阿拉善右旗| 鄄城县| 朝阳市| 门头沟区| 阿坝县| 林州市| 长治县| 雷波县| 普陀区| 泾川县| 婺源县| 雅江县| 扬州市| 广汉市| 马关县| 建平县| 无锡市| 梨树县| 乌拉特后旗| 辽阳市| 闽清县| 鲜城| 临朐县| 宁城县| 广安市| http://3g.gz1980zassc.fun http://3g.bo2020challenges.fun http://3g.gz1980explainc.fun http://3g.gz1980exercisec.fun http://3g.gz1980graduatec.fun http://3g.gz1980costc.fun http://3g.yqo3j8rl7v.fun http://3g.bo2020radios.fun http://3g.bo2020applys.fun http://3g.gz1980binc.fun http://3g.yqo1j8rl8v.fun http://3g.bo2020advertises.fun http://3g.gz1980distancec.fun http://3g.yqo5j7rl0v.fun http://3g.bo2020contracts.fun http://3g.gz1980feec.fun http://3g.bo2020serves.fun http://3g.gz1980pagec.fun