1 条题解

  • 1
    @ 2026-9-5 19:59:59
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    const int MOD = 1000000007;
    const int MAXN = 1005;
    
    //树状数组
    struct Fenwick{
        int tree[MAXN];
        int n;
        void init(int sz){
            n=sz;
            for(int i=0;i<=n;i++) tree[i]=0;
        }
        void add(int pos,int val){
            for(;pos<=n;pos += pos&-pos){
                tree[pos] = (tree[pos] + val) % MOD;
            }
        }
        int query(int pos){
            int res=0;
            for(;pos>0;pos -= pos&-pos){
                res = (res + tree[pos]) % MOD;
            }
            return res;
        }
    };
    
    int main()
    {
        ios::sync_with_stdio(false);
        int T;
        cin>>T;
        for(int caseNo=1;caseNo<=T;caseNo++)
        {
            int N,M;
            cin>>N>>M;
            vector<int> a(N);
            vector<int> b(N);
            for(int i=0;i<N;i++)
            {
                cin>>a[i];
                b[i]=a[i];
            }
            //离散化
            sort(b.begin(),b.end());
            b.erase(unique(b.begin(),b.end()),b.end());
            for(int i=0;i<N;i++)
            {
                a[i] = lower_bound(b.begin(),b.end(),a[i]) - b.begin() + 1; //rank从1开始
            }
    
            vector<int> prev(N,1); // prev[i]:以i结尾,长度为1的方案数,全部=1
            Fenwick bit;
    
            for(int j=2;j<=M;j++) // 子序列长度j
            {
                bit.init(N);
                vector<int> cur(N,0);
                for(int i=0;i<N;i++)
                {
                    int rk = a[i];
                    // 查询比rk小的所有前缀和
                    cur[i] = bit.query(rk-1);
                    bit.add(rk, prev[i]);
                }
                prev.swap(cur);
            }
            int ans =0;
            for(int i=0;i<N;i++)
            {
                ans = (ans + prev[i]) % MOD;
            }
            cout<<"Case #"<<caseNo<<": "<<ans<<endl;
        }
        return 0;
    }
    
    
    
    • 1

    信息

    ID
    208
    时间
    1000ms
    内存
    128MiB
    难度
    8
    标签
    递交数
    19
    已通过
    5
    上传者