zoukankan      html  css  js  c++  java
  • Light OJ 1085

    题目

    link
    给定一个序列, 求出上升子序列的总数。

    分析

    Dp[i] 表示序列 以 i 结尾的数目。
    可知 Dp[i]=Dp[x]+1
    这是一个前缀和, 用树状数组维护。

    Code

    #include <bits/stdc++.h>
    
    using namespace std;
    typedef long long LL;
    const int maxn = 1e5 + 131;
    const LL MOD = 1e9 + 7;
    
    LL Num[maxn], A[maxn], B[maxn];
    int n;
    int lowebit(int x) { return x&(-x); }
    LL Sum(int x) {
        LL ret = 0;
        while(x > 0)
        {
            ret = (ret + Num[x]) % MOD;
            x -= lowebit(x);
        }
        return ret;
    }
    void Update(int x, LL Val) {
        while(x <= n)
        {
            Num[x] = (Num[x] + Val) % MOD;
            x += lowebit(x);
        }
    }
    
    int main()
    {
        int t;
        scanf("%d",&t);
        for(int kase = 1; kase <= t; ++kase)
        {
            scanf("%d",&n);
            memset(Num, 0, sizeof(Num));
            for(int i = 0; i < n; ++i)
                scanf("%lld",A+i), B[i] = A[i];
            sort(A, A+n);
            int Max = unique(A, A+n)-A;
            for(int i = 0; i < n; ++i)
            {
                B[i] = lower_bound(A, A+Max, B[i])-A + 1;
            }
            //cout << "1" <<endl;
            for(int i = 0; i < n; ++i)
            {
                LL s = Sum(B[i]-1) + 1;
                //cout << "2" << "  " <<B[i] <<endl;
                s %= MOD;
                Update(B[i], s);
                //cout << "3" <<endl;
            }
            LL Ans = Sum(n);
            printf("Case %d: %lld
    ",kase, Ans);
        }
        return 0;
    }
    
  • 相关阅读:
    vuejs学习小结(数据处理)
    vuejs的遇到的问题小结
    ES6 对象扩展
    webpack的两个难点
    Sass入门:第二章
    Sass入门:第一章
    Effective JavaScript :第六章
    Effective JavaScript :第五章
    Effective JavaScript :第四章
    Effective JavaScript :第三章
  • 原文地址:https://www.cnblogs.com/aoxuets/p/5506828.html
Copyright © 2011-2022 走看看