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
AC × 3
AC × 24
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