Advertisement
Guest User

Untitled

a guest
Oct 18th, 2017
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.97 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. int input(){
  5. int res = 0; char c = ' ';
  6. while (c < '0') c = getchar();
  7. while (c >= '0') res = res * 10 + (c - '0'), c = getchar();
  8. return res;
  9. }
  10. const int N = 1e5 + 1, K = 101;
  11.  
  12. int f[N], a[N];
  13. void modify(int idx, int val){
  14. for (; idx < N; idx |= (idx + 1))
  15. f[idx] = max(f[idx], val);
  16. }
  17. int get(int idx){
  18. int res = 0;
  19. for (; idx >= 0; idx = (idx & (idx + 1)) - 1)
  20. res = max(res, f[idx]);
  21. return res;
  22. }
  23. int main(){
  24. freopen("input.txt", "r", stdin),
  25. freopen("output.txt", "w", stdout);
  26.  
  27. int n = input(), k = input();
  28. for (int i = 0; i < n; ++ i)
  29. a[i] = input();
  30. for (int i = 0; i < k; ++ i)
  31. if (~i & 1)
  32. for (int j = 0; j < n; ++ j)
  33. modify(a[j], get(a[j] - 1) + 1);
  34. else
  35. for (int j = n - 1; j >= 0; -- j)
  36. modify(a[j], get(a[j] - 1) + 1);
  37. cout << get(N - 1);
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement