Advertisement
Guest User

Untitled

a guest
Jun 2nd, 2015
838
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.83 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. int arr[10004],n,k;
  4. int tree[53][100003]={0};
  5. int dp[53][100003]={0};
  6. int read(int k,int idx){
  7.     int sum = 0;
  8.     while (idx > 0){
  9.         sum += tree[k][idx];
  10.         sum%=5000000;
  11.         idx -= (idx & -idx);
  12.     }
  13.     return sum;
  14. }
  15. void update(int k,int idx ,int val){
  16.     while (idx <= 100002){
  17.         tree[k][idx] += val;
  18.         tree[k][idx]%=5000000;
  19.         idx += (idx & -idx);
  20.     }
  21. }
  22. int main(){
  23.     cin>>n>>k;
  24.     for(int i=0;i<53;i++){
  25.         for(int e=0;e<100002;e++){
  26.             tree[i][e]=0;
  27.             dp[i][e]=0;
  28.         }
  29.     }
  30.     for(int i=1;i<=n;i++){
  31.         cin>>arr[i];
  32.         arr[i]++;
  33.     }
  34.     arr[0]=-2;
  35.     dp[0][0]=1;
  36.     update(1,1,1);
  37.     for(int i=1;i<=n;i++){
  38.         for(int e=1;e<=k;e++){
  39.             dp[e][i]=read(e,arr[i]);
  40.             update(e+1,arr[i]+1,dp[e][i]);
  41.         }
  42.     }
  43.     int sol=0;
  44.     for(int i=0;i<=n;i++){
  45.         sol+=dp[k][i];
  46.         sol%=5000000;
  47.     }
  48.     cout<<sol<<endl;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement