程序死循环,但自己看不出问题
#include<bits/stdc++.h>
using namespace std;
const int N=1e6;
long long a[N],tong[N],d[N],z=1;
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
tong[a[i]]++;//桶排(求数量最多的数字)
}
long long maxx=-1,x=0;//x是标准量,目标是让每个数字都为x
for(int i=1;i<=n;i++)
{
if(tong[i]==maxx) z++;//查重
maxx=max(maxx,tong[i]);//找最大
x=i;
}
for(int i=1;i<=n;i++) d[i]=a[i]-a[i-1];//差分
int ans=0;
for(int i=1;i<=n;i++)
{
int l=0,r=0;
if(a[i]!=ans)
{
if(a[i+1]==x)//单个蹦
{
ans+=abs(a[i]-x);
a[i]=x;
}
else//多个
{
l=a[i];
int y=0;
while(a[i+1]!=x&&a[i]==a[i+1])//测区间长度
{
y++;
}
r=l+y;
ans+=abs(a[i]-x);
d[l]+=abs(a[i]-x);//差分
d[r]-=abs(a[i]-x);
}
}
}
for(int i=1;i<=n;i++) a[i]=a[i-1]+d[i];//前缀和
cout<<ans<<endl<<z;
return 0;
}