zoukankan      html  css  js  c++  java
  • 树状数组 代码(洛谷为例)

    又是一年板子时。
    直接扔代码
    C++:
    树状数组1

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<string>
    #include<ctime>
    #include<queue>
    #include<set>
    #include<stack>
    #include<map>
    #include<algorithm>
    #define maxn 500001
    #define INF 0x3f3f3f3f
    #define inf 0x3f
    #define maxm 1001
    using namespace std;
    int a[maxn],c[maxn],n,m,d,e;
    int lb(int x){
        return x&(-x);
    }
    int sum(int x){
        int ret=0;
        while(x>0){
            ret+=c[x];
            x-=lb(x);
        }
        return ret;
    }
    void add(int x,int d){
        while(x<=n){
            c[x]+=d;
            x+=lb(x);
        }
    }
    int qwq;
    int main(){
        cin>>n>>m;
        for(int i=1;i<=n;i++){
            cin>>a[i];
            add(i,a[i]);
        }
        for(int i=1;i<=m;i++){
            cin>>qwq>>d>>e;
            if(qwq==1) {
                add(d,e);
            }
            if(qwq==2) {
                cout<<sum(e)-sum(d-1)<<endl;
            }
        }
        return 0;
    }

    树状数组2

    // luogu-judger-enable-o2
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<string>
    #include<ctime>
    #include<queue>
    #include<set>
    #include<stack>
    #include<map>
    #include<algorithm>
    #define maxn 500001
    #define INF 0x3f3f3f3f
    #define inf 0x3f
    #define maxm 1001
    using namespace std;
    int a[maxn],c[maxn],n,m,d,e;
    int lb(int x){
        return x&(-x);
    }
    int sum(int x){
        int ret=0;
        while(x>0){
            ret+=c[x];
            x-=lb(x);
        }
        return ret;
    }
    void add(int x,int d){
        while(x<=n){
            c[x]+=d;
            x+=lb(x);
        }
    }
    int query(int x){
        int ans=0;
        while(x>0){
            ans+=c[x];
            x-=lb(x);
        }
        return ans;
    }
    int qwq;
    int main(){
        cin>>n>>m;
        for(int i=1;i<=n;i++){
            cin>>a[i];
            add(i,a[i]-a[i-1]);
        }
        for(int i=1;i<=m;i++){
            cin>>qwq;
            if(qwq==1){
                int k;
                cin>>d>>e>>k;
                add(d,k);
                add(e+1,-k);
            }
            if(qwq==2){
                cin>>d;
                cout<<query(d)<<endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    <转载>c#多线程:线程池和异步编程
    <转载>讲故事谈.NET委托:一个C#睡前故事
    IIS 7.0 成员管理配置
    呵呵,新开博!
    PHP函数中文文档
    请不要做浮躁的人对程序员的忠告
    php新闻发布完成
    JS调试工具
    PHP配置FCKEditor
    ACEGI配置总结(1)
  • 原文地址:https://www.cnblogs.com/kenlig/p/9496240.html
Copyright © 2011-2022 走看看