#include #include #include #include #include #include #include int solve(int A_size, int* A) { // Return the sum of S(S(A)) modulo 10^9+7. int temp = A_size, B_size = 0, k = 0, i = 0, j = 0, C_size = 0, sum = 0; while (temp > 0){ B_size += temp; temp--; } int b_index = 0, max; int *B = malloc(sizeof(int) * B_size); for (k = 0; k < A_size; k++){ for (i = 0; i < A_size - k; i++){ max = 0; j = i + k; for (int x = i; x <= j; x++){ if (A[x] > max) max = A[x]; } B[b_index] = max; b_index++; } } temp = B_size; while (temp > 0){ C_size += temp; temp--; } int c_index = 0; int *C = malloc(sizeof(int) * C_size); for (k = 0; k < B_size; k++){ for (i = 0; i < B_size - k; i++){ max = 0; j = i + k; for (int x = i; x <= j; x++){ if (B[x] > max) max = B[x]; } C[c_index] = max; c_index++; } } for (int a = 0; a < C_size; a++) sum += C[a]; return sum % ((int) pow(10,9) + 7); } int main() { int n; scanf("%i", &n); int *a = malloc(sizeof(int) * n); for (int a_i = 0; a_i < n; a_i++) { scanf("%i",&a[a_i]); } int result = solve(n, a); printf("%d\n", result); return 0; }