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

(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)

{

return a&(-a);

}

void init()

{

for (int i=1;i<=n;i++)

bit[i]=0;

}

void updata(int x,int add)

{

while(x<=n)

{

bit[x]+=add;

x+=lowbit(x);

printf("%d",x);

}printf("%d\n");

}

int sum(int a)

{   int ans=0;

while(a>0)

{

ans+=bit[a];

a-=lowbit(a);

printf("%d",a);

}

return ans;

}

时间: 2024-10-10 00:29:40

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

树状数组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

树状数组的模板

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

树状数组(二叉索引树 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

CF#609E|二分+树状数组

队友发了一道cf的题过来,然后..一上午就做了一道题.. CF#609E 题目地址 复习树状数组求逆序数1 复习树状数组求逆序数2 参考博客1 参考博客2 题目大意:每次可以移动相邻的结点,求最小能够出现1~k子序列的交换次数 思路: 最小交换次数,首先想到与逆序数有关,以前做过类似的题,3 2 1,交换成 1 2 3的最小次数,就是求 3 2 1这个序列的逆序数=3 这题稍微有点变化,就是3 2 1 中间可能还存在 其它数字,比如 3 4 5 2 1,要我们求 出现 3 2 1 的最小交换次数