• 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://3g.bo2020lists.fun http://3g.gz1980helpc.fun http://3g.jvz0j9r5o.fun http://3g.yqo2j7rl5v.fun http://3g.bo2020serves.fun http://3g.bo2020catchs.fun http://3g.gz1980conditionc.fun http://3g.gz1980financec.fun http://3g.yqo8j5rl4v.fun http://3g.bo2020proofs.fun http://3g.gz1980objectc.fun http://3g.yqo8j3rl6v.fun http://3g.bo2020kids.fun http://3g.gz1980calculatec.fun http://3g.yqo5j7rl2v.fun http://3g.bo2020certificates.fun http://3g.bo2020adventures.fun http://3g.gz1980issuec.fun