Language: C++

#include <iostream>
#include <iomanip>
#include <random>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <cmath>
#include <numeric>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <sstream>
#include <bitset>
#include <cassert>
#include <fstream>
#include <queue>

#define len(X) ((int)(X).size())

#ifdef __LOCAL
	#define DEBUG_OUTPUT_ENABLED 1
	#define DBG(X) dout << #X << "=" << (X) << '\n';
	#define SAY(X) dout << (X) << '\n';
#else
	#define DEBUG_OUTPUT_ENABLED 0
	#define DBG(X) 42;
	#define SAY(X) 42;
#endif

#define dout   __debug::instance
using namespace std;
using ll = long long int;
using ull = unsigned long long int;
using ld  = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
template<typename T, typename S> inline ostream& operator<<(ostream& os, const pair<T, S> p) { cout << "[" << p.first << ";" << p.second << "]"; return os; }
template<typename T> inline ostream& operator<<(ostream& os, const vector<T>& v) { for(auto el: v) cout << el << " "; return os; }
template<typename T> inline ostream& operator<<(ostream& os, const set<T>& v) { for(auto el: v) cout << el << " "; return os; }
template<typename T, typename S> inline ostream& operator<<(ostream& os, const map<T, S>& v) { for(auto el: v) cout << el << " "; return os; }
template<typename T> inline ostream& operator<<(ostream& os, const multiset<T>& v) { for(auto el: v) cout << el << " "; return os; }
namespace __debug {
	struct DebugStream {
		private:
			bool is_first;
		public:
			DebugStream(bool _is_first): is_first(_is_first) {}
			template<typename T> DebugStream operator<<(const T& value) const {
				assert(DEBUG_OUTPUT_ENABLED);
				if(is_first) cout << "[DBG] ";
				cout << value;
				return DebugStream(false);
			};

			template<typename T> DebugStream printArray(T* l, T* r) {
				assert(DEBUG_OUTPUT_ENABLED);
				if(is_first) cout << "[DBG] ";
				while(l != r) {
					cout << (*l);
					++l;
					if(l == r) {
						cout << '\n';
					} else {
						cout << ' ';
					}
				}
				return DebugStream(false);
			}
	};
	DebugStream instance(true);
};

const int INT_INF = (int)(2e9);
const ll  LL_INF  = (ll)(2e18);

const int NIL = -1;
static mt19937 _g(time(nullptr));

inline ll randint(ll a, ll b) { ll w = (_g() << 31LL) ^ _g(); return a + w % (b - a + 1); }
inline void fast_io() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); };
template<typename T> inline T sign(T x) { return T(x > 0) - T(x < 0); }
template<typename T> inline T fetch() { T ret; cin >> ret; return ret; }
template<typename T> inline vector<T> fetch_vec(int sz) { vector<T> ret(sz); for(auto& elem: ret) cin >> elem; return ret; }
const int MAXN = 5007;
ll MoveLeft, MoveRight, dp[MAXN];
int a[MAXN], b[MAXN], n;
int F[MAXN];
inline void clearFenv() {
	memset(F, 0, sizeof(F));
}
inline void add(int pos, int val) {
	for(; pos < MAXN; pos |= pos + 1) F[pos] += val;
}
inline int get(int r) {
	int rez = 0;
	for(; r >= 0; r = (r & (r + 1)) - 1) rez += F[r];
	return rez;
}
inline int get(int l, int r) {
	if(l <= r) return get(r) - get(l - 1);
	else return 0;
}
void solve() {
	cin >> n >> MoveRight >> MoveLeft;
	n += 2;
	a[0] = 0;
	a[n - 1] = n - 1;
	for(int i = 1; i < n - 1; ++i) a[i] = fetch<int>();
	for(int i = 1; i < n; ++i) {
		dp[i] = LL_INF;
		clearFenv();
		for(int j = i - 1; j >= 0; --j) {
			if(a[j] < a[i]) {
				int ToLeft = get(a[j] - 1);
				int ToRight = get(a[i] + 1, MAXN - 1);
				ll loc = MoveLeft * ToLeft + MoveRight * ToRight + dp[j];
				if(ToLeft + ToRight == i - j - 1) { 
					dout << j << ' ' << i << '\n';
					dp[i] = min(dp[i], loc);
				}
			}
			add(a[j], 1);
		}
	}
	//for(int i = 0; i < n; ++i) dout << i << ": " << dp[i] << '\n';
	cout << dp[n - 1] << '\n';
}

int main() {
	fast_io();
	solve();

	return 0;
}


Compiler output:
a.cc: In function 'void solve()':
a.cc:31:16: error: reference to '__debug' is ambiguous
   31 | #define dout   __debug::instance
      |                ^~~~~~~
a.cc:119:41: note: in expansion of macro 'dout'
  119 |                                         dout << j << ' ' << i << '\n';
      |                                         ^~~~
In file included from /usr/include/c++/14/bits/stl_algobase.h:69,
                 from /usr/include/c++/14/string:51,
                 from /usr/include/c++/14/bits/locale_classes.h:40,
                 from /usr/include/c++/14/bits/ios_base.h:41,
                 from /usr/include/c++/14/ios:44,
                 from /usr/include/c++/14/ostream:40,
                 from /usr/include/c++/14/iostream:41,
                 from a.cc:1:
/usr/include/c++/14/debug/debug.h:50:13: note: candidates are: 'namespace std::__debug { }'
   50 |   namespace __debug { }
      |             ^~~~~~~
a.cc:43:11: note:                 'namespace __debug { }'
   43 | namespace __debug {
      |           ^~~~~~~