当前位置: 首页>>代码示例>>C++>>正文


C++ SegmentTree::initialize方法代码示例

本文整理汇总了C++中SegmentTree::initialize方法的典型用法代码示例。如果您正苦于以下问题:C++ SegmentTree::initialize方法的具体用法?C++ SegmentTree::initialize怎么用?C++ SegmentTree::initialize使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在SegmentTree的用法示例。


在下文中一共展示了SegmentTree::initialize方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: main

int main() {

    int b, p, l, n, n_input;

    while(scanf("%d %d %d %d", &b, &p, &l, &n) == 4) {
        if(b == 0 and p == 0 and l == 0 and n == 0) break;
        B = b;
        mod = p;
        
        n_input = n;
        
        SegmentTree tree;
        tree.initialize((int)l + 1);
        
        char cm;
        int i, v; 
        while(n_input--) {
            assert(scanf(" %c %d %d", &cm, &i, &v) == 3);
            
            //D(cm); D(i); D(v);
            // responder al comando cm, i, v 
            if (cm == 'E') {
                tree.update(i, v);
            } else if (cm == 'H'){
                int ans = tree.query(i, v) % mod;
                printf("%d\n", ans);
            } 
        }
        puts("-");
    }
    return 0;
}
开发者ID:Ochobytes,项目名称:competitive_programming,代码行数:32,代码来源:j.6.cpp

示例2: test

    int
    test() {
        SegmentTree st;
        st.initialize(14, 100);

        st.insert(0, 45);
        st.insert(1, 4);
        st.insert(2, 5);
        st.insert(3, 2);
        st.insert(4, 99);
        st.insert(5, 41);
        st.insert(6, 45);
        st.insert(7, 45);
        st.insert(8, 51);
        st.insert(9, 89);
        st.insert(10, 1);
        st.insert(11, 3);
        st.insert(12, 5);
        st.insert(13, 98);

        vi_t v;
        v.push_back(45);
        v.push_back(4);
        v.push_back(5);
        v.push_back(2);
        v.push_back(99);
        v.push_back(41);
        v.push_back(45);
        v.push_back(45);
        v.push_back(51);
        v.push_back(89);
        v.push_back(1);
        v.push_back(3);
        v.push_back(5);
        v.push_back(98);

        for (int i = 0; i < 14; ++i) {
            for (int j = i; j < 14; ++j) {
                pii_t one = st.query_min(i, j);
                pii_t two = naive_query_min(v, i, j);
                printf("query_min(%d, %d) == (%d, %d)\n", i, j, one.INDEX, two.INDEX);
                assert(one.LENGTH == two.LENGTH);
            }
        }

        return 0;
    }
开发者ID:dhruvbird,项目名称:genome-diff-compression,代码行数:47,代码来源:segtree.hpp

示例3: assert

// 'rin' is the input range set
//
// 'rout' is the output range set. It is guaranteed that 'rout'
// contains the mapping needed to re-contruct the least number of
// ranges needed to represent the complete range. Start with rout[0]
// and keep following the indexes till you reach some 'k' for which
// rout[k] == n.
//
// rout[i] contains the next index within rout (in sorted string
// order) where you need to jump to find the next range that completes
// the smallest number of ranges that cover the entire range.
// 
// you will need to index into 'slcp' to locate the index of this
// range in the original string
//
void
compress_ranges(vi_t &rin, vi_t &rout) {
    SegmentTree st;
    rout.clear();
    if (rin.empty()) {
        return;
    }

    const int n = rin.size();
    st.initialize(n + 1, n + 1);
    rout.resize(n);
    st.insert(n, 0);

    for (int i = rin.size() - 1; i >= 0; --i) {
        assert(rin[i] > 0);
        int l = i + 1, r = std::min(n, i+rin[i]);
        pii_t m = st.query_min(l, r);
        rout[i] = m.INDEX;
        st.insert(i, m.LENGTH + 1);
    }
}
开发者ID:dhruvbird,项目名称:genome-diff-compression,代码行数:36,代码来源:algorithm.hpp

示例4: test

    int
    test() {
        vui_t v;
        v.push_back(45);
        v.push_back(4);
        v.push_back(5);
        v.push_back(2);
        v.push_back(99);
        v.push_back(41);
        v.push_back(45);
        v.push_back(45);
        v.push_back(51);
        v.push_back(89);
        v.push_back(1);
        v.push_back(3);
        v.push_back(5);
        v.push_back(98);

        for (int i = 0; i < 10; ++i) {
            // printf("%d: %d\n", i, log2(i));
        }

        SegmentTree st;
        st.initialize(v);

	printf("Testing SegmentTree implementation\n");
	printf("----------------------------------\n");

        for (size_t i = 0; i < v.size(); ++i) {
            for (size_t j = i; j < v.size(); ++j) {
                pui_t one = st.query_max(i, j);
                pui_t two = naive_query_max(v, i, j);
                printf("query_max(%u, %u) == (%u, %u)\n", (uint_t)i, (uint_t)j, one.first, two.first);
                assert_eq(one.first, two.first);
            }
        }

	printf("\n");
        return 0;
    }
开发者ID:mingodad,项目名称:cpp-libface,代码行数:40,代码来源:segtree.hpp

示例5: build_random_tree

void build_random_tree(int n = 100){
  t.arr.resize(n);
  for (int i=0; i<n; ++i) t.arr[i] = random() * (random() % 2 ? -1 : 1);
  t.initialize();
}
开发者ID:AssaultKoder95,项目名称:codejam,代码行数:5,代码来源:segment_tree_tester.cpp


注:本文中的SegmentTree::initialize方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。