zoukankan      html  css  js  c++  java
  • 树状数组

    #include <bits/stdc++.h>
    using namespace std;
    //规定下标从一开始
    int a[1000],c[1000],n;
    int lowbit(int x){
        return  x&(-x);
    }
    
    //获得前n项和的值
    int get_sum(int x){
        int s=0;
        while(x>0){
            s+=c[x];
            x=x-lowbit(x);
        }
        return s;
    }
    //获得区间的值
    int get_range_sum(int i,int j){
        return get_sum(j)-get_sum(i)+a[i];
    }
    //把i位置增加x值
    void update(int i,int x){
        a[i]+=x;//别忘了
        while(i<=n){
            c[i]+=x;
            i=i+lowbit(i);
        }
    }
    //把i位置设置为x值
    void set_value(int i,int x){
        int p=i;
        while(i<=n){
            c[i]=c[i]-a[p]+x;
            i=i+lowbit(i);
        }
        a[p]=x;//别忘了
    }
    int main() {
        cin>>n;
        memset(a,0, sizeof(a));
        memset(c,0, sizeof(c));
        for(int i=1;i<=n;i++){
            //如果cin>>a[i],set_value(i,a[i]);的话,会错误
            int x;
            cin>>x;
    //        set_value(i,x);
            update(i,x);
        }
        cout<<get_sum(n)<<endl;
        set_value(1,100);
        cout<<get_range_sum(1,1)<<endl;
        return 0;
    }
  • 相关阅读:
    加载器学习记录
    日常记录
    php实现银联支付
    PHP 判断密码强度
    laravel artisan 命令列表
    PHP && ,and ,||,or 的区别
    数组与对象的转换
    正则表达式
    微信退款
    laravel when 的用法
  • 原文地址:https://www.cnblogs.com/MorrowWind/p/12416310.html
Copyright © 2011-2022 走看看