题目大意:就是问你长度为k的不下降子序列的个数
解题思路:就 d p [ i ] [ j ] dp[i][j] dp[i][j]长度为 i i i且不下降子序列的长度为 j j j的个数, d p [ i ] [ j ] = ∑ k = 1 i − 1 [ d p [ k ] [ j − 1 ] & & a [ k ] < = a [ i ] ] dp[i][j]=\sum_{k=1}^{i-1} [dp[k][j-1]\&\&a[k]<=a[i]] dp[i][j]=∑k=1i−1[dp[k][j−1]&&a[k]<=a[i]]
#include<bits/stdc++.h>
#define mid ((l + r) >> 1)
#define Lson rt << 1, l , mid
#define Rson rt << 1|1, mid + 1, r
#define ms(a,al) memset(a,al,sizeof(a))
#define log2(a) log(a)/log(2)
#define _for(i,a,b) for( int i = (a); i < (b); ++i)
#define _rep(i,a,b) for( int i = (a); i <= (b); ++i)
#define for_(i,a,b) for( int i = (a); i >= (b); -- i)
#define rep_(i,a,b) for( int i = (a); i > (b); -- i)
#define lowbit(x) ((-x) & x)
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define INF 0x3f3f3f3f
#define LLF 0x3f3f3f3f3f3f3f3f
#define hash Hash
#define next Next
#define pb push_back
#define f first
#define s second
#define y1 Y
using namespace std;
const int N = 1e7 + 10, mod = 1e9 + 7;
const int maxn = 4e5 + 10;
const long double eps = 1e-5;
const int EPS = 500 * 500;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
typedef pair<double,double> PDD;
const int BUF=30000000;
char Buf[BUF],*buf=Buf;
template<typename T> void read(T &a)
{
for(a=0;*buf<48;buf++);
while(*buf>47) a=a*10+ *buf++ -48;
}
template<typename T, typename... Args> void read(T &first, Args& ... args)
{
read(first);
read(args...);
}
ll a[maxn];
ll tr[maxn][20], dp[maxn][20];
inline void add(int x, int idx, ll val) {
while(x < maxn) {
tr[x][idx] += val;
x += lowbit(x);
}
}
inline ll sum(int x,int idx) {
ll res = 0;
while(x) {
res += tr[x][idx];
x -= lowbit(x);
}
return res;
}
int main()
{
fread(Buf,1,BUF,stdin);
int n, m;
read(n,m); m++;
for(int i = 1; i <= n; ++ i) read(a[i]);
dp[a[1]][1] = 1; add(a[1],1,1);
for(int i = 2; i <= n; ++ i) {
dp[a[i]][1] += 1;
for(int j = 1; j <= 11; ++ j)
dp[a[i]][j] += sum(a[i],j - 1);
for(int j = 1; j <= 11; ++ j)
add(a[i],j,dp[a[i]][j]);
}
ll ans = 0;
for(int i = 1; i <= n; ++ i)
ans += dp[a[i]][m];
cout << ans << endl;
return 0;
}