rcpl

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub ruthen71/rcpl

:heavy_check_mark: TopTwo
(misc/top_two.hpp)

大きい 2 つの要素を管理する構造体です。

コンストラクタ

(1) TopTwo<T, inf> t()
(2) TopTwo<T, inf> t(T a, T b)

大きい 2 つの要素を a, b として作成します。

ab は順不同です。

ab を指定しなかった場合、それぞれ -inf で初期化されます。

add

bool t.add(T x)

x を追加します。

$(a, b)$ が更新された場合には true を、更新されなかった場合は false を返します。

Verified with

Code

#pragma once

template <class T, T inf> struct TopTwo {
    T a, b;
    TopTwo() {
        a = -inf;
        b = -inf;
    }
    TopTwo(T a, T b) : a(a), b(b) {
        if (a < b) {
            std::swap(this->a, this->b);
        }
    }
    bool add(T x) {
        if (a < x) {
            b = a;
            a = x;
            return true;
        } else if (b < x) {
            b = x;
            return true;
        }
        return false;
    }
};
#line 2 "misc/top_two.hpp"

template <class T, T inf> struct TopTwo {
    T a, b;
    TopTwo() {
        a = -inf;
        b = -inf;
    }
    TopTwo(T a, T b) : a(a), b(b) {
        if (a < b) {
            std::swap(this->a, this->b);
        }
    }
    bool add(T x) {
        if (a < x) {
            b = a;
            a = x;
            return true;
        } else if (b < x) {
            b = x;
            return true;
        }
        return false;
    }
};
Back to top page