要 subtask 1 范围内的
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define i128 __int128
#define inf (1ll << 62)
#define pb push_back
#define mp make_pair
#define PII pair<int , int>
#define fi first
#define se second
using namespace std;
const int mod = 998244353 , MAXN = 1e5 + 10;
vector<int>tree(MAXN << 2);
inline void pushup(int p) {
tree[p] = tree[p << 1] + tree[p << 1 | 1];
return;
}
void update(int l , int r , int x , int p) {
if(l == r) {
tree[p] ++;
return;
}
int mid = (l + r) >> 1;
if(x <= mid) update(l , mid , x , p << 1);
else update(mid + 1 , r , x , p << 1 | 1);
pushup(p);
return;
}
int query(int l , int r , int x , int y , int p) {
if(x <= l && r <= y) return tree[p];
int mid = (l + r) >> 1 , ans = 0;
if(x <= mid) ans += query(l , mid , x , y , p << 1);
if(mid < y) ans += query(mid + 1 , r , x , y , p << 1 | 1);
return ans;
}
inline void solve() {
int n;
cin >> n;
vector<int>a(n) , b(n) , cnt(n);
for(int i = 0;i < n;i ++) {
cin >> a[i];
b[i] = a[i];
}
sort(b.begin() , b.end());
b.erase(unique(b.begin() , b.end()) , b.end());
vector<ll>s(n + 1);
for(int i = 0;i < n;i ++) {
a[i] = lower_bound(b.begin() , b.end() , a[i]) - b.begin() + 1;
if(query(0 , n , 0 , a[i] - 1 , 1) > 0) cnt[i] = 1 , s[a[i]] ++;;
update(0 , n , a[i] , 1);
}
for(int i = 1;i <= b.size();i ++) s[i] += s[i - 1];
ll ans = 1;
for(int i = 0;i < n;i ++) ans = (ans * (cnt[i] + 1)) % mod;
for(ll i = 2;i <= b.size();i ++) {
ll x = query(0 , n , i , i , 1);
if(x == 1) continue;
ans = (ans + mod - ((1 << x) - x - 1) % mod * (1 << s[i - 1]) % mod * (1 << (s[b.size()] - s[i])) % mod) % mod;
}
cout << ans << "\n";
return;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 1;
// cin >> t;
while(t --) {
solve();
}
return 0;
}