麻烦大家帮忙看一下,我实在找不出错误了。(时间复杂度应该是可以过的)
#include<bits/stdc++.h>//数据量变大,暴力算法会超时。
//根据题意多次分段相加(第一题只分段f)
using namespace std;
long long g(int x,int r){//计算g(x)的值
return x/r;
}
int main()
{
ios::sync_with_stdio(false);
int n,m;
cin>>n>>m;
int cnt[n+10];
int r=m/(n+1);
cnt[0]=0;
cnt[n+1]=m;//对f分段
long long sum=0;
for(int i=1;i<=n;i++)cin>>cnt[i];
int Long=0;//不能占long
for(int i=0;i<=n;i++)//f分段 ,f=i
{
long long sumpart=0;
for(int j=cnt[i];j<cnt[i+1];j=j+Long)//g分段
{
int numend=r*g(j,r)+1;//r个数的值为g(j),最大到numend
if(numend>=cnt[i+1])numend=cnt[i+1]-1;
int numlong=numend-j+1;
long long f_g=abs(i-g(j,r));
sumpart+=f_g*numlong;
Long=numlong;
}
sum+=sumpart;
}
cout<<sum<<endl;
return 0;
}