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了呀!我向来都是唯果论,不问过程,只看结果。数据结构这种东西如果只掌握模板还有什么意思,只有了解其中的原理才能够更好的用模板。

  • 相关阅读:
    数据结构(java语言描述)顺序栈的使用(两个大数相加)
    DB2 Sql性能查看与优化
    spring默认为单例模式
    Java map的匿名类的初始化
    使用nohup后台执行ftp传输命令
    停止一个java的线程执行
    静态类
    XML语法随记
    Crontab有关
    string转Date转回String(JAVA)
  • 原文地址:https://www.cnblogs.com/FriskyPuppy/p/10204192.html
Copyright © 2011-2022 走看看