#include #include #include using namespace atcoder; using namespace std; using ll = long long; using mint = modint998244353; int main() { int N;cin >> N; set value; vector A(N + 1, 0); for (int i = 1;i <= N;i++) { cin >> A[i]; value.insert(A[i]); } map tos; int K = 0; for (auto v : value) { tos[v] = K +1; K++; } fenwick_tree bits(K + 10); fenwick_tree bits2(K + 10); fenwick_tree cnt(K + 10); fenwick_tree cnt2(K + 10); vector T(N + 1, 0); mint ans = 0; for (int i = N;i >= 1;i--) { int now = tos[A[i]]; T[i] = (A[i] * cnt.sum(0, now)) + bits.sum(0, now); bits.add(now, A[i]); ans += bits2.sum(0, now) + (A[i] * cnt2.sum(0, now)); bits2.add(now, T[i]); cnt.add(now, 1); if (cnt.sum(0, now) != 0) { cnt2.add(now, 1); } } cout << ans.val() << endl; }