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

    相关文章
    相关标签/搜索
    四肖八码中特二四六天天好彩免费资料大全香港马会最快开奖现场开奖结果免费资料历史记录大全一肖一码期期准1 一在线查询网 武川县| 辰溪县| 仁化县| 杭锦旗| 南京市| 共和县| 扶风县| 阿坝县| 栖霞市| 海门市| 鄯善县| 冷水江市| 泰宁县| 德惠市| 汶上县| 卫辉市| 常宁市| 桂平市| 福泉市| 息烽县| 夏河县| 赤峰市| 陈巴尔虎旗| 新乡市| 达拉特旗| 马龙县| 江达县| 博爱县| 大厂| 昭通市| 耿马| 贵德县| 公主岭市| 达拉特旗| 伊通| 屏山县| 定日县| 小金县| 古浪县| 开江县| 垦利县| 措美县| 鄂州市| 明光市| 林周县| 永和县| 衢州市| 资源县| 梁河县| 奇台县| 关岭| 丽江市| 定安县| 礼泉县| 阳山县| 洪洞县| 泸水县| 齐齐哈尔市| 抚宁县| 莱阳市| 贺兰县| 晋中市| 锡林浩特市| 民勤县| 裕民县| 新平| 廉江市| 石城县| 哈尔滨市| 新闻| 邵东县| 时尚| 孟村| 阿克陶县| 舒兰市| 巴中市| 中西区| 辛集市| 梅河口市| 上犹县| 九寨沟县| 电白县| 东兰县| 成武县| 丽水市| 澜沧| 邯郸市| 长宁县| 五家渠市| 铅山县| 河曲县| 鹤壁市| 宾阳县| 白水县| 深泽县| 广西| 永兴县| 宁波市| 阳泉市| 禄丰县| 夏邑县| 丰原市| 浦县| 余庆县| 徐州市| 彭州市| 井陉县| 梧州市| 普兰县| 庆阳市| 久治县| 宁蒗| 郓城县| 宁都县| 霸州市| 斗六市| 镇康县| 休宁县| 武功县| 崇明县| 渝中区| 东光县| 蒲江县| 曲靖市| 子长县| 曲麻莱县| 波密县| 敦煌市| 中江县| 怀宁县| 司法| 东平县| 志丹县| 嫩江县| 恩施市| 越西县| 瑞丽市| 长治县| 朝阳县| 九台市| 屯留县| 镇原县| 弥渡县| 阿克苏市| 天全县| 大姚县| 永平县| 娄底市| 灯塔市| 自治县| 山阴县| 樟树市| 博湖县| 扬中市| 丰城市| 永福县| 镇康县| 永德县| 新化县| 湘潭市| 霍山县| 呼和浩特市| 洪洞县| 遂宁市| 鄂托克前旗| 客服| 银川市| 平顶山市| 保康县| 大兴区| 法库县| 永吉县| 古田县| 颍上县| 嘉荫县| 吕梁市| 汾西县| 昌宁县| 祁阳县| 新绛县| 安宁市| 沾化县| 夏河县| 苏尼特右旗| 镇巴县| 万全县| 滁州市| 焦作市| 广昌县| 兰西县| 沈阳市| 寻甸| 紫金县| 响水县| 鹤庆县| 乌审旗| 会泽县| 垣曲县| 萍乡市| 金塔县| 岫岩| 罗江县| 安顺市| 江永县| 利辛县| 麻阳| 铅山县| 天津市| 汉中市| 建瓯市| 高雄市| 孝昌县| 陵水| 苏尼特左旗| 渭南市| 抚远县| 永州市| 张家川| 龙海市| 正阳县| 揭东县| 长垣县| 新宁县| 汪清县| 定兴县| 新营市| 浦北县| 阳曲县| 荔浦县| 太谷县| 江津市| 巩留县| 锡林郭勒盟| 南江县| 泸西县| 石棉县| 南雄市| 海林市| 丰原市| 宜都市| 厦门市| 托克托县| 璧山县| 五原县| 新宁县| 长武县| 包头市| 泰和县| 仁化县| 都兰县| 车致| 乌拉特中旗| 大新县| 自治县| 成都市| 孝感市| 阿拉善盟| 九龙县| 余庆县| 铜陵市| 梧州市| 疏勒县| 同江市| 桂东县| 喜德县| 乌鲁木齐县| 宁国市| 泰顺县| 密云县| 镇巴县| 忻城县| 嘉禾县| 额济纳旗| 贵港市| 桃源县| 饶河县| 高陵县| 谷城县| 南投市| 淮南市| 康定县| 麻栗坡县| 芷江| 沙雅县| 罗定市| 微山县| 通化市| 体育| 铅山县| 巴林左旗| 大姚县| 枝江市| 武川县| 田林县| 延庆县| 通山县| 日喀则市| 永清县| 安仁县| 合阳县| 屏东县| 根河市| 怀来县| 平遥县| 昌都县| 马山县| 九江市| 南投市| 安仁县| 沽源县| 泗水县| 革吉县| 绥芬河市| 四川省| 徐水县| 山阴县| 绥芬河市| 怀柔区| 阳城县| 双江| 麻江县| 峡江县| 昌黎县| 奉节县| 铅山县| 綦江县| 轮台县| 辽中县| http://3g.jvz0j0r4o.fun http://3g.bo2020dezands.fun http://3g.yqo1j6rl8v.fun http://3g.bo2020reasons.fun http://3g.bo2020concretes.fun http://3g.bo2020dates.fun http://3g.gz1980focusc.fun http://3g.yqo5j0rl8v.fun http://3g.bo2020breasts.fun http://3g.gz1980contractc.fun http://3g.yqo4j9rl8v.fun http://3g.bo2020deletes.fun http://3g.gz1980correctc.fun http://3g.yqo3j4rl9v.fun http://3g.gz1980trafficc.fun http://3g.yqo8j1rl7v.fun http://3g.bo2020edges.fun http://3g.yqo7j8rl3v.fun