Skip to the content.

:heavy_check_mark: test/range_reverse_range_sum_splay.test.cpp

Depends on

Code

#define PROBLEM "https://judge.yosupo.jp/problem/range_reverse_range_sum"

#include <data_structure/splay_tree.hpp>    // for SplayTree
#include <fastio/base.hpp>                  // for FASTIO, cin, cout
#include <fastio/char/write.hpp>            // for operator<<
#include <fastio/signed/read.hpp>           // for operator>>
#include <fastio/signed/write.hpp>          // for operator<<
#include <fastio/vector/read.hpp>           // for operator>>
#include <templates/macro/abbrev/endl.hpp>  // for endl
#include <templates/macro/abbrev/ll.hpp>    // for ll
#include <templates/macro/segtree/RSQ.hpp>  // for RSQ
#include <templates/rep.hpp>                // for rep
#include <templates/template.hpp>
#include <vector>  // for vector

int main() {
    int n, q;
    cin >> n >> q;
    vector<ll> a(n);
    cin >> a;

    using splay = SplayTree<RSQ(ll, 0)>;
    splay::nptr root{nullptr};
    splay tree(a, root);
    rep(_, q) {
        ll T, l, r;
        cin >> T >> l >> r;
        if (T == 0) {
            tree.reverse(root, l, r);
        } else {
            auto ans = tree(root, l, r);
            cout << ans << endl;
        }
    }
}
#line 1 "test/range_reverse_range_sum_splay.test.cpp"
#define PROBLEM "https://judge.yosupo.jp/problem/range_reverse_range_sum"

#include <data_structure/splay_tree.hpp>    // for SplayTree
#include <fastio/base.hpp>                  // for FASTIO, cin, cout
#include <fastio/char/write.hpp>            // for operator<<
#include <fastio/signed/read.hpp>           // for operator>>
#include <fastio/signed/write.hpp>          // for operator<<
#include <fastio/vector/read.hpp>           // for operator>>
#include <templates/macro/abbrev/endl.hpp>  // for endl
#include <templates/macro/abbrev/ll.hpp>    // for ll
#include <templates/macro/segtree/RSQ.hpp>  // for RSQ
#include <templates/rep.hpp>                // for rep
#include <templates/template.hpp>
#include <vector>  // for vector

int main() {
    int n, q;
    cin >> n >> q;
    vector<ll> a(n);
    cin >> a;

    using splay = SplayTree<RSQ(ll, 0)>;
    splay::nptr root{nullptr};
    splay tree(a, root);
    rep(_, q) {
        ll T, l, r;
        cin >> T >> l >> r;
        if (T == 0) {
            tree.reverse(root, l, r);
        } else {
            auto ans = tree(root, l, r);
            cout << ans << endl;
        }
    }
}

Test cases

Env Name Status Elapsed Memory
g++ almost_t0_00 :heavy_check_mark: AC 760 ms 27 MB
g++ almost_t1_00 :heavy_check_mark: AC 711 ms 28 MB
g++ example_00 :heavy_check_mark: AC 5 ms 4 MB
g++ max_random_00 :heavy_check_mark: AC 781 ms 28 MB
g++ max_random_01 :heavy_check_mark: AC 774 ms 28 MB
g++ max_random_02 :heavy_check_mark: AC 779 ms 28 MB
g++ nq_01_00 :heavy_check_mark: AC 5 ms 4 MB
g++ nq_01_01 :heavy_check_mark: AC 4 ms 4 MB
g++ nq_01_02 :heavy_check_mark: AC 9 ms 5 MB
g++ nq_01_03 :heavy_check_mark: AC 4 ms 4 MB
g++ nq_01_04 :heavy_check_mark: AC 4 ms 4 MB
g++ nq_01_05 :heavy_check_mark: AC 8 ms 5 MB
g++ nq_01_06 :heavy_check_mark: AC 15 ms 15 MB
g++ nq_01_07 :heavy_check_mark: AC 17 ms 18 MB
g++ random_00 :heavy_check_mark: AC 680 ms 21 MB
g++ random_01 :heavy_check_mark: AC 482 ms 25 MB
g++ random_02 :heavy_check_mark: AC 703 ms 23 MB
g++ small_random_00 :heavy_check_mark: AC 274 ms 7 MB
g++ small_random_01 :heavy_check_mark: AC 151 ms 6 MB
g++ small_random_02 :heavy_check_mark: AC 215 ms 7 MB
Back to top page