#include #include #include #include int find_sum(const std::vector& A) { int sum = 0; for (unsigned int i = 0; i < A.size(); ++i) { sum += A[i]; if (sum >= 10e9 + 7) { sum = 1000000007; return sum; } } return sum; } int find_max_elem(const int* A, unsigned int count) { int max_elem = -INT_MAX; unsigned int i = 0; for (; i <= count; ++i) { if (max_elem < A[i]) max_elem = A[i]; } return max_elem; } std::vector max_transform(const std::vector& A) { std::vector B; for (unsigned int k = 0; k < A.size(); ++k) { for (unsigned int i = 0; i < A.size() - k; ++i) { unsigned int j = i + k; int max_elem = find_max_elem(&A[i], j - i); B.push_back(max_elem); } } return B; } int main(int argc, char* argv[]) { int N = 0; std::cin >> N; if (N < 1 || N > 2 * 100000) return -1; std::vector A; //std::vector A(N); int value; for (int i = 0; i < N; ++i) { if (std::cin >> value) A.push_back(value); } std::vector B; B = max_transform(max_transform(A)); //for (unsigned int i = 0; i < B.size(); ++i) //{ // printf("%d, ", B[i]); //} //printf("\n"); int sum = find_sum(B); printf("%d\n", sum); }