Submission #72213639
Source Code Expand
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define ll long long
const ll MOD = 998244353;
ll mult(ll a, ll b){
return ((a % MOD) * (b % MOD)) % MOD;
}
ll add(ll a, ll b){
return ((a % MOD) + (b % MOD)) % MOD;
}
ll subt(ll a, ll b){
return ((a % MOD) - (b % MOD) + MOD) % MOD;
}
ll binpow(ll a, ll b){
if(b == 0) return 1;
if(b & 1){
return mult(a, binpow(a, b-1));
}
ll tmp = binpow(a, b/2);
return mult(tmp, tmp);
}
ll inv(ll x){
return binpow(x, MOD-2);
}
class SegmentTree{
private:
std::vector<int> aint;
int n;
int join(int x, int y) {
return add(x, y);
}
void _update(int node, int from, int to, int x, int val) {
if(from < to) {
int mid = (from + to) / 2;
if(x <= mid)
_update(node * 2, from, mid, x, val);
else
_update(node * 2 + 1, mid + 1, to, x, val);
aint[node] = join(aint[node * 2], aint[node * 2 + 1]);
} else
aint[node] = val;
}
int _query(int node, int from, int to, int x, int y) {
if(from == x && to == y) {
return aint[node];
} else {
int mid = (from + to) / 2;
if(x <= mid && y <= mid)
return _query(node * 2, from, mid, x, y);
else if(mid + 1 <= x && mid + 1 <= y)
return _query(node * 2 + 1, mid + 1, to, x, y);
else
return join(_query(node * 2, from, mid, x, mid),
_query(node * 2 + 1, mid + 1, to, mid + 1, y));
}
}
void _print(int node, int from, int to) {
if(from < to) {
int mid = (from + to) / 2;
_print(node * 2, from, mid);
_print(node * 2 + 1, mid + 1, to);
} else
std::cout << aint[node] << " ";
}
public:
SegmentTree(int n_) {
n = n_;
aint.resize(1 + 4 * n);
}
void update(int x, int val) {
_update(1, 1, n, x, val);
}
int query(int x, int y) {
if(x > y) return 0;
return _query(1, 1, n, x, y);
}
void print() {
std::cout << "Print array\n";
_print(1, 1, n);
std::cout << '\n';
}
};
int main(){
ios::sync_with_stdio(0); cin.tie(0);
int n;
cin>>n;
int a[n+5];
for(int i=1; i<=n; i++) cin>>a[i];
SegmentTree tmp(n+5), turun(n+5), naik(n+5);
for(int i=1; i<=n; i++){
// ll x = tmp.query(1, a[i] - 1) + naik.query(1, a[i] - 1) + turun.query(1, a[i] - 1);
// ll y = naik.query(a[i] + 1, n) + turun.query(a[i] + 1, n);
ll x = add(tmp.query(1, a[i] - 1), add(naik.query(1, a[i] - 1), turun.query(1, a[i] - 1)));
ll y = add(naik.query(a[i] + 1, n), turun.query(a[i] + 1, n));
naik.update(a[i], x);
turun.update(a[i], y);
tmp.update(a[i], 1);
}
ll ans = 0;
for(int i=1; i<=n; i++){
ans = add(ans, turun.query(i, i));
}
cout<<ans<<endl;
return 0;
}
Submission Info
| Submission Time |
|
| Task |
F - Beautiful Kadomatsu |
| User |
takeonicky |
| Language |
C++ IOI-Style(GNU++20) (GCC 14.2.0) |
| Score |
525 |
| Code Size |
2950 Byte |
| Status |
AC |
| Exec Time |
590 ms |
| Memory |
16876 KiB |
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
525 / 525 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
sample_01.txt, sample_02.txt, sample_03.txt |
| All |
sample_01.txt, sample_02.txt, sample_03.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt |
| Case Name |
Status |
Exec Time |
Memory |
| sample_01.txt |
AC |
1 ms |
1644 KiB |
| sample_02.txt |
AC |
0 ms |
1644 KiB |
| sample_03.txt |
AC |
0 ms |
1644 KiB |
| test_01.txt |
AC |
1 ms |
1644 KiB |
| test_02.txt |
AC |
175 ms |
9324 KiB |
| test_03.txt |
AC |
241 ms |
11884 KiB |
| test_04.txt |
AC |
102 ms |
5356 KiB |
| test_05.txt |
AC |
400 ms |
13036 KiB |
| test_06.txt |
AC |
259 ms |
9580 KiB |
| test_07.txt |
AC |
420 ms |
13676 KiB |
| test_08.txt |
AC |
183 ms |
7916 KiB |
| test_09.txt |
AC |
314 ms |
11116 KiB |
| test_10.txt |
AC |
215 ms |
8684 KiB |
| test_11.txt |
AC |
137 ms |
6508 KiB |
| test_12.txt |
AC |
373 ms |
16876 KiB |
| test_13.txt |
AC |
372 ms |
16876 KiB |
| test_14.txt |
AC |
567 ms |
16876 KiB |
| test_15.txt |
AC |
590 ms |
16876 KiB |
| test_16.txt |
AC |
580 ms |
16876 KiB |
| test_17.txt |
AC |
578 ms |
16876 KiB |
| test_18.txt |
AC |
589 ms |
16876 KiB |
| test_19.txt |
AC |
563 ms |
16876 KiB |
| test_20.txt |
AC |
577 ms |
16876 KiB |
| test_21.txt |
AC |
576 ms |
16876 KiB |