zoukankan      html  css  js  c++  java
  • HDU 1556 数据结构-树状数组-改段求点

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556

    解题思路:树状数组,只要了解树状数组的原理就不用死记模板了,总之树状数组管理的就是前缀和,高度越高的的结点管理的范围越广

          所以要是改点求段:更改一个点就要向上传递

          所以要是改段求点:更改一个点就要向下传递

    代码:

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    
    using namespace std;
    const int MAXN = 1e5 + 7;
    
    int a[MAXN];
    int t;
    
    int low_bit(int k) {
        return k & -k;
    }
    void update(int i, int val) {
        while(i > 0) {
            a[i] += val;
            i -= low_bit(i);
        }
    }
    int sum(int k) {
        int ret = 0;
        while(k <= t) {
            ret += a[k];
            k += low_bit(k);
        }
        return ret;
    }
    int main() {
        //freopen("in.txt","r",stdin);
        while(~scanf("%d", &t) && t) {
            memset(a, 0, sizeof(a));
            int b, c;
            int temp = t;
            while(temp--) {
                scanf("%d%d", &b, &c);
                // cout << "b: " << b << " c: " << c << endl;
                update(c, 1);
                if(b > 1) update(b-1, -1);
            }
            printf("%d", sum(1));
            for(int i = 2; i <= t; i++) {
                printf(" %d", sum(i));
            }
            printf("
    ");
        }
        return 0;
    }
    View Code

    思考:今年2019了呀!我向来都是唯果论,不问过程,只看结果。数据结构这种东西如果只掌握模板还有什么意思,只有了解其中的原理才能够更好的用模板。

  • 相关阅读:
    多线程02
    多线程01
    CSS
    Mybatis CRUD中万能Map的用法及优势
    Tomcat配置
    Node.js+Vue+Webpack
    Java的几种常见排序算法
    maven插件 mybatis逆向工程
    ssm依赖
    mybatis spring整合依赖配置
  • 原文地址:https://www.cnblogs.com/FriskyPuppy/p/10204192.html
Copyright © 2011-2022 走看看