zawatins-library

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

View the Project on GitHub zawa-tin/zawatins-library

:heavy_check_mark: test/kadane.test.cpp

Depends on

Code

#define PROBLEM "https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/1/ITP1_1_A"

#include "../src/algorithm/Kadane.hpp"
#include <iostream>
#include <cassert>

int main() {
    std::vector<int> ins = {-5, -1, 6, 4, 9, -6, -6, -7};
    zawa::Kadane<int> kadane(ins, -100);
    kadane.build();
    
    int ans = 19;
    int left = 2, right = 5;
    assert(left == kadane.get_seg().first);
    assert(right == kadane.get_seg().second);
    assert(ans == kadane.get());

    std::cout << "Hello World" << std::endl;
}
#line 1 "test/kadane.test.cpp"
#define PROBLEM "https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/1/ITP1_1_A"

#line 2 "src/algorithm/Kadane.hpp"

#include <vector>

namespace zawa {

    template <typename T>
    class Kadane {

    private:
        std::vector<T> arr;
        std::pair<int, int> segment;
        T res;

    public:
        Kadane(std::vector<T>& arr, T init) 
            : arr(arr.begin(), arr.end()), 
              res(init) {}

        void build() {
            T dp = res;
            int left = 0;
            for (int right = 0 ; right < (int)arr.size() ; right++) {
                if (dp + arr[right] < arr[right]) {
                    left = right;
                }
                dp = std::max(dp + arr[right], arr[right]);

                if (res < dp) {
                    segment = {left, right};
                }
                res = std::max(res, dp);
            }
            segment.second++;
        }

        T get() {
            return res;
        }

        std::pair<int, int> get_seg() {
            return segment;
        }
    };

}// namespace zawa
#line 4 "test/kadane.test.cpp"
#include <iostream>
#include <cassert>

int main() {
    std::vector<int> ins = {-5, -1, 6, 4, 9, -6, -6, -7};
    zawa::Kadane<int> kadane(ins, -100);
    kadane.build();
    
    int ans = 19;
    int left = 2, right = 5;
    assert(left == kadane.get_seg().first);
    assert(right == kadane.get_seg().second);
    assert(ans == kadane.get());

    std::cout << "Hello World" << std::endl;
}
Back to top page