#include <bits/stdc++.h>
using namespace std;
const int MAX_NUM=1e7+10;
int a[210];
int f[MAX_NUM]={0};
int main()
{
std::ios::sync_with_stdio(false);
int n,N;
cin>>n>>N;
int sum=0;
a[0]=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
int tmp=0;
for(int i=0;i<N;i++)
{
for(int j=tmp;j<=n;j++)
{
if(a[j]<=i)
{
f[i]=j;
}
else
{
tmp=j-1;
break;
}
}
}
int num=1;
for(int i=0;i<N;i++)
{
if(f[i]==f[i+1])
{
num++;
}
else
{
sum+=f[i]*num;
num=1;
}
}
cout<<sum;
return 0;
}
二分法
#include <bits/stdc++.h>
using namespace std;
const int MAX_NUM=1e7+10;
int a[210];
int f[MAX_NUM]={0};
int main()
{
std::ios::sync_with_stdio(false);
int n,N;
cin>>n>>N;
int sum=0;
a[0]=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
int left=0;
for(int i=0;i<N;i++)
{
int right=n;
int mid;
while(left<=right )
{
mid=left+(right-left)/2;
if(a[mid]>i)
{
right=mid-1;
}
else
{
left=mid+1;
}
}
f[i]=right;
left=right;
}
int num=1;
for(int i=0;i<N;i++)
{
if(f[i]==f[i+1])
{
num++;
}
else
{
sum+=f[i]*num;
num=1;
}
}
cout<<sum;
return 0;
}