Advertisement
Guest User

Untitled

a guest
Sep 20th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.37 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int N = 1100;
  6. int LIS[N]; // Arreglo para llevar la LIS en cada posición
  7. int LIS2[N]; // Arreglo para llevar la LIS en cada posición en orden inverso
  8. int nums[N];
  9.  
  10. int main() {
  11. int t;
  12. cin >> t;
  13. while (t--) {
  14. memset(LIS, 0, sizeof(LIS));
  15. memset(LIS2, 0, sizeof(LIS2));
  16. int n;
  17. cin >> n;
  18. for (int i = 0; i < n; i++) {
  19. int ac;
  20. cin >> ac;
  21. nums[i] = ac;
  22. }
  23.  
  24. multiset<int> ms;
  25. for (int i = 0; i < n; i++) {
  26. ms.insert(nums[i]);
  27. multiset<int>::iterator it = ms.lower_bound(nums[i]);
  28. it++;
  29. if (it != ms.end()) {
  30. ms.erase(it);
  31. }
  32.  
  33. // Guardamos la respuesta en cada momento i
  34. LIS[i] = (int) ms.size();
  35. }
  36.  
  37. int ans = (int) -1e9;
  38. multiset<int> ms2;
  39. for (int i = n - 1; i >= 0; i--) {
  40. ms2.insert(nums[i]);
  41. multiset<int>::iterator it = ms2.lower_bound(nums[i]);
  42. it++;
  43. if (it != ms2.end()) {
  44. ms2.erase(it);
  45. }
  46. LIS2[i] = (int) (ms2.size());
  47.  
  48. // La respuesta será la mayor suma - 1 para no contar el elemento i 2 veces
  49. ans = max(ans, LIS2[i] + LIS[i] - 1);
  50. }
  51. cout << ans << "\n";
  52. }
  53. return 0;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement