Language: C++

#include <bits/stdc++.h>
using namespace std;
using int64 = int64_t;
#define int int64

// editorial(りんごさん)
// a,b,c,d,eという5つのゴミがあるとする
// この時, 遠い方から拾っていったほうが良いのはわかる
// a, b, c, d, eを拾うためのコストは次のようになる
//  (2^2+1)(e-d) + (3^2+1)(d-c) + (4^2+1)(c-b) + (5^2+1)(b-a) + (6-2+1)a
// = 5e + 5d + 7c + 9b + 11a
// ここで, 5(e+d) + 7c + 9b + 11a
// という風に最初の二項以降は2ずつ増えていることがわかる
//
// ここで, 1度に拾う個数を決めておけば, その部分をまとめて拾えることがわかる
//
// editorial 前計算
// 累積和により, 求めることが可能
// 差分を考えることで, 累積和で求められる
// 差分の増加は
// (k+1)^2*x - k^2*x = (2*k+1)*x
// であるから, 差分を考えることで実装可能

signed main() {
	int n,x; cin>>n>>x;
	vector<int> a(n);
	for(int i=0;i<n;++i) cin>>a[i];

  vector<int> sm(n+1,0);
  for(int i=0;i<n;++i) {
    sm[i+1] += sm[i] + a[i];
  }
  
	auto _cost = [&](int k) {
                 int res=0, now=n;
                 res += 5*sm[now];
                 now -= k*2;
                 while (now > 0) {
                   res += sm[now]*2;
                   now -= k;

                   // オーバーフロー対策
                   if(res<0) {
                     return 1LL<<60;
                   }
                 }
                 return res;
               };
	
	int ans = 1LL<<60;
	// kは分割数
	for(int k=1;k<=n;++k) {
		ans = min(ans, _cost(k) + k*x);	
	}
	ans += n * x;
	cout<<ans<<endl;
  return 0;
}


Compiler output:
a.cc: In lambda function:
a.cc:47:25: error: inconsistent types 'long long int' and 'long int' deduced for lambda return type
   47 |                  return res;
      |                         ^~~
a.cc: In function 'int main()':
a.cc:53:26: error: no matching function for call to 'min(int64&, long long int)'
   53 |                 ans = min(ans, _cost(k) + k*x);
      |                       ~~~^~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/14/algorithm:60,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:51,
                 from a.cc:1:
/usr/include/c++/14/bits/stl_algobase.h:233:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::min(const _Tp&, const _Tp&)'
  233 |     min(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/14/bits/stl_algobase.h:233:5: note:   template argument deduction/substitution failed:
a.cc:53:26: note:   deduced conflicting types for parameter 'const _Tp' ('long int' and 'long long int')
   53 |                 ans = min(ans, _cost(k) + k*x);
      |                       ~~~^~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/stl_algobase.h:281:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::min(const _Tp&, const _Tp&, _Compare)'
  281 |     min(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/14/bits/stl_algobase.h:281:5: note:   candidate expects 3 arguments, 2 provided
In file included from /usr/include/c++/14/algorithm:61:
/usr/include/c++/14/bits/stl_algo.h:5686:5: note: candidate: 'template<class _Tp> constexpr _Tp std::min(initializer_list<_Tp>)'
 5686 |     min(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/14/bits/stl_algo.h:5686:5: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/14/bits/stl_algo.h:5696:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::min(initializer_list<_Tp>, _Compare)'
 5696 |     min(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/14/bits/stl_algo.h:5696:5: note:   template argument deduction/substitution failed:
a.cc:53:26: note:   mismatched types 'std::initializer_list<_Tp>' and 'long int'
   53 |                 ans = min(ans, _cost(k) + k*x);
      |                       ~~~^~~~~~~~~~~~~~~~~~~~~