本文共 1172 字,大约阅读时间需要 3 分钟。
给定一个长度为 N 的正整数数列,其中第 i i i 个数为 a i a_i ai 。你可以进行任意次下述 “模仿” 操作:选择一个位置 i ( 1 ≤ i ≤ N ) i(1 \leq i \leq N) i(1≤i≤N) , 令 a i a_i ai 等于 a i + 1 a_{i+1} ai+1 。
输入描述:
第一行一个正整数 N N N 。
接下来 一行 N N N 个整数 a i a_i ai ,含义如体面所示。 1 ≤ N ≤ 1 0 6 1 \leq N \leq 10^6 1≤N≤106 , 1 ≤ a i ≤ 1 0 9 1 \leq a_i \leq 10^9 1≤ai≤109输出描述:
两个空格分隔的整数,第一个代表这个数列最大的数字和,第二个代表达成这个目标最少的操作次数
输入:
6
10 3 3 5 3 5
输出:
35 3
说明:
先选择位置 5 进行操作,变成 10 3 3 5 5 5,再选择位置 3 进行操作,变成 10 3 5 5 5 5,最后选择位置 2 进行操作,变成 10 5 5 5 5 5,数字和最大为35。
#includeusing namespace std;int main(){ long long n; long long arr[1000005]; long long sum=0, cnt=0; while(cin>>n) //输入一个正整数 N { //输入一行 N 个整数 for (long long i = 0; i < n; i++) { cin >> arr[i]; } //始于倒数第二个元素,终于第一个元素 for (long long i = n-2; i >= 0; i--) { if(arr[i] < arr[i+1]) { arr[i] = arr[i+1]; cnt ++; } sum += arr[i]; } sum += arr[n-1]; //最大数字和别忘记倒数第一个元素 cout << sum << " " << cnt << endl; } return 0;}
转载地址:http://qnwxi.baihongyu.com/