树状数组的模板

int BIT[1000], a[1000], n;
void update(int x, int val)
{
      for(; x <= n; x += x&-x)
        BIT[x] += val;
}
int query(int x)
{
     int sum = 0;
     for(; x > 0; x -= x&-x)
        sum += BIT[x];
     return sum;
}

int main()
{
     scanf(“%d”, &n);
     int i;
     for(i = 1; i <= n; i++)
     {
           scanf(“%d”, &a[i]);
           update(i, a[i]);
     }
     printf(“sum of first 10 elements is %d\n”, query(10));
     printf(“sum of all elements in range [2, 7] is %d\n”, query(7) – query(2-1));
     return 0;
}

  待解决类似问题:  历届试题 小朋友排队  http://lx.lanqiao.cn/problem.page?gpid=T123

原文地址:https://www.cnblogs.com/passion-sky/p/8453493.html

时间: 2024-10-10 02:50:20

树状数组的模板的相关文章

树状数组小模板......

(1)"改点求段"型 树状数组模板题-hdu1166+poj2352 - Delacour_的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/delacour_/article/details/33364033 树状数组区间求和三种模型 - mr_lee - 博客频道 - CSDN.NET http://blog.csdn.net/q573290534/article/details/6664454 int lowbit(int a) { retur

树状数组2模板 Luogu 3368

树状数组区间修改&&**--*&%&-- 好吧,我看了Running-coder的博客,久久才明白-- 废话不多说:讲思路:无------ 代码: 1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<algorithm> 5 using namespace std; 6 int bit[1000000],n,m,d,p,xx,yy,kk; 7

树状数组1模板 Luogu 3374

树状数组? 不理解?--背代码吧--QAQ~(滑稽) 1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<algorithm> 5 using namespace std; 6 int bit[1000000],n,m,d,p,xx,yy; 7 void add(int i,int x){ 8 while(i<=n){ 9 bit[i]+=x; 10 i+=i &am

树状数组【模板】

Tree[N] = A[N-2^k+1] + - + A[N] 单点更新,区间求值:树状数组代表区间的和. const int MAXN = 100010; int N,Tree[MAXN]; int Lowbit(int i) { return i & (-i); } void Update(int i,int x) { while(i <= N) { Tree[i] = Tree[i] + x; i += Lowbit(i); } } int Query(int N) { int sum

树状数组【模板 1】

题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值. 接下来M行每行包含3个整数,表示一个操作,具体如下: 操作1: 格式:1 x k 含义:将第x个数加上k 操作2: 格式:2 x y 含义:输出区间[x,y]内每个数的和 输出格式: 输出包含若干行整数,即为所有操作2的结果.

树状数组(模板)

模板题:POJ 2352 Stars  HDU1166 1 int lowbit(int x) 2 { 3 return x&(-x); 4 } 5 void update(int x,int val) 6 { 7 while(x<=maxn)//maxn为传入参数的最大值. 8 { 9 c[x]+=val; 10 x+=lowbit(x); 11 } 12 } 13 int query(int x) 14 { 15 int sum=0; 16 while(x>0) 17 { 18 s

树状数组(二叉索引树 BIT Fenwick树) *【一维基础模板】(查询区间和+修改更新)

刘汝佳:<训练指南>Page(194) #include <stdio.h> #include <string.h> #include <stdlib.h> #include <algorithm> using namespace std; //一维树状数组基础模板 int lowbit(int x) { return x&(-x); } int c[1001]; int sum(int x) //计算从1到x的数组元素的和 { int

树状数组模板1——单点修改区间查询

树状数组的模板,修改单点的值,查询某个区间 1 #include<cstdio> 2 #include<cctype> 3 using namespace std; 4 5 int c[500010],n,m; 6 7 int read() 8 { 9 int x=0,f=1; 10 char c=getchar(); 11 while (!isdigit(c)) 12 f=c=='-'?-1:1,c=getchar(); 13 while (isdigit(c)) 14 x=(x

bzoj4397【Usaco2015 Dec】Breed Counting(前缀和、树状数组)

题目描述 Farmer John's N cows, conveniently numbered 1…N, are all standing in a row (they seem to do so often that it now takes very little prompting from Farmer John to line them up). Each cow has a breed ID: 1 for Holsteins, 2 for Guernseys, and 3 for