Advertisement
Guest User

Untitled

a guest
Feb 21st, 2020
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.25 KB | None | 0 0
  1. #include<iostream>
  2. #include<vector>
  3. #include<algorithm>
  4. #include<string>
  5. #include<set>
  6. #include<iterator>
  7. #include<map>
  8. #include<deque>
  9. #include<math.h>
  10. #include<numeric>
  11. #include<queue>
  12. #include<stack>
  13. #include<iomanip>
  14. #include<unordered_set>
  15. #include<chrono>
  16. #include<random>
  17.  
  18. #define int long long
  19. #define pb push_back
  20. #define ld long double
  21. using namespace std;
  22.  
  23.  
  24. int32_t main() {
  25. ios_base::sync_with_stdio(false);
  26. cin.tie(0);
  27. int n, t;
  28. cin >> n >> t;
  29. vector<int> a(n);
  30. for (int i = 0; i < n; i++) {
  31. cin >> a[i];
  32. }
  33. vector<vector<pair<int, int>>> dp(n + 1);
  34. vector<int> ind(n + 1);
  35. vector<vector<int>> pref(n + 1);
  36. for (int i = 1; i <= n; i++) {
  37. int sum = 0;
  38. for (int j = i - 1; j > -1; j--) {
  39. sum += a[j];
  40. if (j == 0) {
  41. dp[i].pb({ sum * sum, sum * sum });
  42. }
  43. else {
  44. if (dp[j][0].first > sum* sum) {
  45. continue;
  46. }
  47. while (ind[j] < dp[j].size() - 1 && dp[j][ind[j]].first <= sum * sum) {
  48. ind[j]++;
  49. }
  50. dp[i].pb({ sum * sum, sum * sum + pref[j][ind[j]] });
  51. }
  52. }
  53. int mn = 1e18;
  54. for (auto to : dp[i]) {
  55. mn = min(mn, to.second);
  56. pref[i].pb(mn);
  57. }
  58. }
  59. int mn = 1e18;
  60. for (auto to : dp[n]) {
  61. mn = min(mn, to.second);
  62. }
  63. cout << mn;
  64. return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement