#include #include #include #include #include using namespace std; int N; const int Modulu = 1000000007; vector> maxValues; void calculateMaxValues(vector values) { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (maxValues[i][j] == -1) { if (i == j) { maxValues[j][i] = maxValues[i][j] = values[i]; } else { maxValues[j][i] = maxValues[i][j] = max(maxValues[i][j - 1], values[j]); } } } } } void solveMaxTransform() { cin >> N; vector arr; arr.resize(N); for (int i = 0; i < N; i++) cin >> arr[i]; maxValues.resize(N); for (int i = 0; i < N; i++) maxValues[i].resize(N); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { maxValues[i][j] = -1; } } calculateMaxValues(arr); vector S; for (int k = 0; k <= (N - 1); k++) { for (int i = 0; i <= (N - k - 1); i++) { int j = k + i; S.push_back(maxValues[i][j]); } } S.shrink_to_fit(); N = S.size(); maxValues.resize(N); for (int i = 0; i < N; i++) maxValues[i].resize(N); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { maxValues[i][j] = -1; } } calculateMaxValues(S); vector SA; for (int k = 0; k <= (N - 1); k++) { for (int i = 0; i <= (N - k - 1); i++) { int j = k + i; SA.push_back(maxValues[i][j]); } } SA.shrink_to_fit(); unsigned long long int sum = 0; for (int i = 0; i < SA.size(); i++) { sum = ((SA[i] % Modulu) + (sum % Modulu)) % Modulu; } cout <