fr(i,1,30){ int mid=(r-l)/2+l,s=0; for (int i=1;i<=n;i++) s+=max(0ll,a[i]-mid); if (s==m){ printf("%d",mid); return 0; } s>m?l=mid:r=mid+1; }
内外层循环用的都是 i,加上玄学二分,开 long long 可过
i
long long