fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. long maxSubarraySum(const vector<int>& arr) {
  5. long maxSum = arr[0], currentSum = arr[0];
  6. for (size_t i = 1; i < arr.size(); ++i) {
  7. currentSum = max((long)arr[i], currentSum + arr[i]);
  8. maxSum = max(maxSum, currentSum);
  9. }
  10. return maxSum;
  11. }
  12.  
  13. long calculateMaxQualityScore(int impactFactor, vector<int> ratings) {
  14. int n = ratings.size();
  15.  
  16. // Step 1: Get original quality score
  17. long originalScore = maxSubarraySum(ratings);
  18.  
  19. // Step 2: Strategy 1 - Amplify Ratings
  20. vector<int> deltaAmplify(n);
  21. for (int i = 0; i < n; ++i)
  22. deltaAmplify[i] = ratings[i] * impactFactor - ratings[i];
  23.  
  24. long maxDeltaAmplify = deltaAmplify[0], curr = deltaAmplify[0];
  25. for (int i = 1; i < n; ++i) {
  26. curr = max((long)deltaAmplify[i], curr + deltaAmplify[i]);
  27. maxDeltaAmplify = max(maxDeltaAmplify, curr);
  28. }
  29.  
  30. // Step 3: Strategy 2 - Adjust Ratings
  31. vector<int> deltaAdjust(n);
  32. for (int i = 0; i < n; ++i) {
  33. int adjusted;
  34. if (ratings[i] >= 0)
  35. adjusted = floor((double)ratings[i] / impactFactor);
  36. else
  37. adjusted = ceil((double)ratings[i] / impactFactor);
  38. deltaAdjust[i] = adjusted - ratings[i];
  39. }
  40.  
  41. long maxDeltaAdjust = deltaAdjust[0]; curr = deltaAdjust[0];
  42. for (int i = 1; i < n; ++i) {
  43. curr = max((long)deltaAdjust[i], curr + deltaAdjust[i]);
  44. maxDeltaAdjust = max(maxDeltaAdjust, curr);
  45. }
  46.  
  47. return max({originalScore, originalScore + maxDeltaAmplify, originalScore + maxDeltaAdjust});
  48. }
  49. int main() {
  50. int impactFactor, n;
  51. cin >> impactFactor >> n;
  52.  
  53. vector<int> ratings(n);
  54. for (int i = 0; i < n; ++i) {
  55. cin >> ratings[i];
  56. }
  57.  
  58. long result = calculateMaxQualityScore(impactFactor, ratings);
  59. cout << result << endl;
  60.  
  61. return 0;
  62. }
Success #stdin #stdout 0s 5288KB
stdin
3
5
5 -3 3 2 4
stdout
33