思路:
依次遍历输入的A数组,由于只用到A数组当前值,故无需维护A数组,直接通过其值大小来构建f数组,构建好f数组之后算sum值,由于存在多个相同的数字连续储存,可以通过计算乘法减少计算次数。
c++代码如下:
#include<iostream>
using namespace std;
int main() {
int n,N;
cin>>n>>N;
int f[N];
int now = 0;
int left=0;
for(int i = 0; i<n; i++) {
int now = 0;
cin>>now;
for(left; left<now; ++left) {
f[left] = i;
}
if(i==n-1) {
for(left; left<N; ++left) {
f[left] = i+1;
}
}
}
int count = 1;
int sum = 0;
for(int i = 0; i<N; ++i) {
if(f[i]==f[i+1]) {
count++;
} else {
sum += f[i]*count;
count = 1;
}
}
cout << sum << endl;
return 0;
}