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]);
    }
  • 相关阅读:
    Banner实现无线轮播
    二维码生成
    自定义View圆环
    百度地图
    OkHttp解析
    自定义控件生成随机数
    OkHttp中文文档
    Da购物车
    Angular过滤器
    popupWindow
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10642676.html
Copyright © 2011-2022 走看看