Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.38 KB | None | 0 0
  1. #include<set>
  2. #include <unordered_set>
  3. #include <unordered_map>
  4. #include<map>
  5. #include<list>
  6. #include<iomanip>
  7. #include<cmath>
  8. #include<string>
  9. #include<vector>
  10. #include<queue>
  11. #include<stack>
  12. #include<complex>
  13. #include<sstream>
  14. #include<iostream>
  15. #include<fstream>
  16. #include<algorithm>
  17. #include<numeric>
  18. #include<utility>
  19. #include<functional>
  20. #include<stdio.h>
  21. #include<assert.h>
  22. #include<memory.h>
  23. #include<bitset>
  24. #include<math.h>
  25. #include <string.h>
  26. #include <strings.h>
  27.  
  28.  
  29. #define f first
  30. #define s second
  31. #define mp make_pair
  32. #define pb push_back
  33. #define lp(i,a,n) for(int i=(a);i<=(int)(n);++i)
  34. #define lpd(i,a,n) for(int i=(a);i>=(int)(n);--i)
  35. #define clr(a,b) memset(a,b,sizeof a)
  36. #define all(v) v.begin(),v.end()
  37. #define println(a) cout <<(a) <<endl
  38. #define sz(x) ((int)(x).size())
  39. #define readi(x) scanf("%d",&x)
  40. #define read2i(x,y) scanf("%d%d",&x,&y)
  41. #define read3i(x,y,z) scanf("%d%d%d",&x,&y,&z)
  42. #define readll(x) scanf("%I64d",&x)
  43. #define mod 1000000007
  44. #define eps 1e-10
  45. #define infi 1000000000ll
  46. #define infll 1000000000000000000ll
  47.  
  48.  
  49. using namespace std;
  50. typedef long long ll;
  51. typedef pair<int, int> pii;
  52. typedef pair<ll, ll> pll;
  53. typedef vector<int> vi;
  54. typedef vector<vi> vvi;
  55. typedef vector<ll> vll;
  56. typedef set<int> si;
  57. typedef unordered_set<int> usi;
  58. typedef map<int,int> mii;
  59. typedef map<ll,ll> mll;
  60. typedef unordered_map<ll,ll> umll;
  61.  
  62. const int N = 500002;
  63. int n,k,a[N],rep[N+2],tree[N+5];
  64. ll dp[N],sum[N];
  65.  
  66. void update (int i,int val) {
  67. ++i;
  68. while (i < N+2)
  69. tree[i] += val , i += i&-i;
  70. }
  71.  
  72. int getSum(int i) {
  73. ++i;
  74. int ret = 0;
  75. while (i > 0) ret += tree[i] , i -=i&-i;
  76. return ret;
  77. }
  78. int main(){
  79. scanf("%d%d",&n,&k);
  80.  
  81. lp(i,1 , n) scanf("%d",&a[i]);
  82.  
  83. if(!k) {
  84. lp(i, 1, n) if(!a[i]) {
  85. printf("0\n");
  86. return 0;
  87. }
  88. }
  89.  
  90. dp[0] = sum[1] = 1;
  91. int j = 1;
  92. lp(i,1 , n) {
  93. if(++rep[min(N,a[i])] == 1)
  94. update(min(N, a[i]), 1);
  95. while(j <= n && getSum(min(k, N)) == k+1) {
  96. --rep[min(a[j],N)];
  97. if(!rep[min(a[j],N)]) update(min(a[j],N), -1);
  98. ++j;
  99. }
  100.  
  101. dp[i] += (sum[i] - sum[j-1] + mod)%mod;
  102. sum[i+1] = (sum[i]+dp[i])%mod;
  103. }
  104.  
  105. printf("%lld\n",dp[n]);
  106. return 0;
  107. }
  108.  
  109. /*
  110. */
  111.  
  112. //ios::sync_with_stdio(0);cin.tie(0);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement