a[i]代表第i件商品的价格为a[i],考虑到价格是有序排列,若x>a[i],那x+1必定大于a[i],所以下一次比较就不需要再从头开始,可以直接从a[i]开始,缩短查询时间。用b[i]数组来记录f(i)的个数,即价格最高的商品是第i件的个数,方便后面做乘法。
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long n,N;
cin>>n>>N;
long long a[n+1];
a[0]=0;
long long b[n+1]={0};
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
int sum=0;
int i=0;
for(int x=0;x<N;x++)
{
if(x>=a[n])
sum=sum+n;
else if(x>=a[i]&&x<a[i+1])
b[i]++;
else
{
i++;
b[i]++;
}
}
for(int j=0;j<n+1;j++)
{
sum=sum+j*b[j];
}
cout<<sum;
return 0;
}