zoukankan      html  css  js  c++  java
  • cf1144G 将串分解成单调递增和递减子串(贪心)

    这算哪门子dp..

    具体做法就是贪心,建立两个vector存递增序列递减序列,操作过程中a可以合法地匀一个给b

    就是判断第i个数放在递增序列里还是放在递减序列里,需要根据后面的数来进行决策

    #include<bits/stdc++.h>
    #define ll long long
    #define P pair<ll,ll>
    #define mp make_pair
    #define fi first
    #define se second
    #define N 200100
    using namespace std;
    
    ll n,m,num[N],sy[N];
    vector<P>a,b;
    
    int main()
    {
        ll i,j,p,q;
        cin>>n;
        for(i=1;i<=n;i++) scanf("%lld",&num[i]);
        a.push_back(mp(-1,0));
        b.push_back(mp(N,0));
        for(i=1;i<=n;i++)
        {
            if(num[i]<=a.back().fi&&num[i]>=b.back().fi)
            {
                puts("NO");
                return 0;
            }
            if(num[i]>a.back().fi)
            {
                sy[i]=0;
                a.push_back(mp(num[i],i));
                continue;
            }
            if(a.back().fi<b.back().fi&&a.back().se>b.back().se)
            {
                sy[a.back().se]=1;
                b.push_back(a.back());
                a.pop_back();
            }
            if(num[i]>a.back().fi)
            {
                sy[i]=0;
                a.push_back(mp(num[i],i));
                continue;
            }
            if(num[i]<b.back().fi)
            {
                sy[i]=1;
                b.push_back(mp(num[i],i));
                continue;
            }
            puts("NO");
            return 0;
        }
        puts("YES");
        for(i=1;i<=n;i++) printf("%lld ",sy[i]);
    }
  • 相关阅读:
    shell习题第21题:计算数字的个数
    shell习题第20题:统计文件大小
    萌新小白
    编程第一天
    萌新报道
    linux下安装php扩展pdo_oci和oci8
    安装Hadoop伪分布式踩过的坑
    zabbix安装过程
    MySQL_索引
    mysql复制
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10642676.html
Copyright © 2011-2022 走看看