Advertisement
Guest User

Untitled

a guest
Jan 13th, 2016
458
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.80 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. long double a[1000000];
  5. long long b[1000000];
  6. long double dp[1000000];
  7. int best[1000000];
  8. int main()
  9. {
  10.     int n,k;
  11.     cin>>n>>k;
  12.     for (int i=1;i<=n;i++)
  13.     {
  14.         cin>>b[i];
  15.         a[i]=log2(b[i]+0.0);
  16.     }
  17.     multiset<pair<long double,int> > st;
  18.     st.insert(make_pair(0,1));
  19.     for (int i=2;i<=n;i++)
  20.     {
  21.         multiset<pair<long double,int> >::iterator it=st.begin();
  22.         dp[i]=it->first+a[i];
  23.         best[i]=it->second;
  24.         st.insert(make_pair(dp[i],i));
  25.         if (i-k>=1)
  26.         {
  27.             st.erase(st.find(make_pair(dp[i-k],i-k)));
  28.         }
  29.     }
  30.     int v=n;
  31.     long long ans=1;
  32.     while(v!=0)
  33.     {
  34.         ans*=b[v];
  35.         ans%=1000000007;
  36.         v=best[v];
  37.     }
  38.     cout<<ans<<endl;
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement