• B New Year and Ascent Sequence


    题意:给n个数组,任意两两拼接,总拼接数有n^2种,所以自身拼接一次,并且AB!=BA,求拼接后满足i<j,a[i]<a[j](称为‘上升’)至少一次的拼接数。

    思路:情况1:自身存在上升,则该数组与任意拼接都存在上升,即2*n-1种都上升。

       情况2:两两不存在上升,所以,只要存在前一个数组的最小值小于后一个数组的最大值即存在上升。

    代码直接参考

    ————————————————
    版权声明:本文为CSDN博主「骑猪大侠」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    代码链接:https://blog.csdn.net/m0_43449107/article/details/103840294

    #include<bits/stdc++.h>
    typedef long long ll;
    const int N=1e6+1;
    using namespace std;
    int a[N], mx[N] ,pre[N];
    int main()
    {
        int n, x, flag, mn, l;
        ll ans=0;
        scanf("%d", &n);
        for(int i=0; i<n; i++)
        {
            cin>>l;
            flag=0;
            mn=N;
            for(int j=0; j<l; j++)
            {
                scanf("%d", &x);
                if(mn<x) flag=1;     //存在这么一对索引的序列标记一下
                mx[i]=max(x, mx[i]), mn=min(x, mn);
            }
            if(flag) mn=-1, mx[i]=N-1;  //所有的序列可以和它组合,他也可以和其他所有序列组合
            pre[mn+1]++;
        }
        for(int i=1; i<N; i++)
        {
            pre[i]+=pre[i-1];    //最小值的前缀数组
        }
        for(int i=0; i<n; i++)
        {
            ans+=pre[mx[i]];   //对于每个序列的最大值,看前面有多少个序列的最小值是小于这个序列的
        }
        printf("%lld\n", ans);
        return 0;
    }
    ————————————————
    版权声明:本文为CSDN博主「骑猪大侠」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/m0_43449107/article/details/103840294
    View Code
  • 相关阅读:
    CTF-Reverse-[GXYCTF2019]luck_guy
    凸度偏差与收益率曲线
    【翻译】理解 LSTM 网络
    基于 Keras 用 LSTM 网络做时间序列预测
    AIMR 固定收益推荐读物
    基于 Keras 用深度学习预测时间序列
    预测美国债券回报
    久期增加会提高长期预期回报吗?
    市场收益率预期与远期收益率
    sql server 查询时会锁表吗?
  • 原文地址:https://www.cnblogs.com/DreamingBetter/p/12181475.html
Copyright © 2020-2023  润新知