Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// Solutie - Moca Andrei - 100p
- #include <bits/stdc++.h>
- using namespace std;
- const int mod = 666013;
- int aib[111][111111], x, n, K, res, cnt, s;
- inline void Update(int k, int poz, int val)
- {
- for (int i = poz; i <= n; i += i & -i)
- {
- aib[k][i] += val;
- if (aib[k][i] > mod)
- aib[k][i] -= mod;
- }
- }
- inline int Query(int k, int poz)
- {
- s = 0;
- for (int i = poz; i > 0; i -= i & -i)
- {
- s += aib[k][i];
- if (s > mod)
- s -= mod;
- }
- return s;
- }
- int main()
- {
- ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
- cin >> n >> K;
- vector<int> v(n + 1), vs(n + 1);
- for (int i = 1; i <= n; ++i)
- cin >> v[i], vs[i] = v[i];
- sort(vs.begin(), vs.end());
- for (int i = 1; i <= n; ++i)
- v[i] = lower_bound(vs.begin(), vs.end(), v[i]) - vs.begin();
- for (int i = 1; i <= n; ++i)
- {
- Update(1, v[i], 1);
- for (int k = 2; k <= K; ++k)
- Update(k, v[i], Query(k - 1, v[i] - 1));
- }
- cout << Query(K, n);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement