lowbit

数组的第 i 位存储的是以 i 为结尾的长度为lowbit(i) 的一段的和.

  1. int lowBit(x) {
  2. return x & -x;
  3. }

加点

  1. int n, bt[maxn];
  2.  
  3. void btAdd(int pos, int delta) {
  4. for (; pos <= n; pos += lowBit(p)) {
  5. bt[pos] += delta;
  6. }
  7. }

查询

  1. int btSum(int pos) {
  2. int ans = ;
  3. for (; pos; pos -= lowBit(p)) {
  4. ans += bt[p];
  5. }
  6. return ans;
  7. }

完整代码

略有不同的,dad曾经教给我,树状数组这么写

  1. //线段树练习1
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<cstring>
  5. #define maxn 100010
  6. using namespace std;
  7. int n,m,t[maxn];
  8. void add(int k,int z)
  9. {
  10. while(k<=n)
  11. {
  12. t[k]+=z;
  13. k+=k&(-k);
  14. }
  15. }
  16. int find(int k)
  17. {
  18. int ans=;
  19. while(k)
  20. {
  21. ans+=t[k];
  22. k-=k&(-k);
  23. }
  24. return ans;
  25. }
  26. int main()
  27. {
  28. int i,j,k,x;
  29. scanf("%d",&n);
  30. for(i=;i<=n;i++)
  31. {
  32. scanf("%d",&x);
  33. add(i,x);
  34. }
  35. scanf("%d",&m);
  36. for(i=;i<=m;i++)
  37. {
  38. int x,y,z,w;
  39. scanf("%d",&w);
  40. scanf("%d%d",&x,&y);
  41. if(w==)
  42. add(x,y);
  43. else if(w==)
  44. printf("%d\n",find(y)-find(x-));
  45. }
  46. return ;
  47. }
  1. //线段树练习2
  2. #include<iostream>
  3. using namespace std;
  4. int t[],n,m;
  5. void add(int k,int z)
  6. {
  7. while(k<=n)
  8. {
  9. t[k]+=z;
  10. k+=k&(-k);
  11. }
  12. }
  13. int find(int a)
  14. {
  15. int ans=;
  16. while(a)
  17. {
  18. ans+=t[a];
  19. a-=a&(-a);
  20. }
  21. return ans;
  22. }
  23. int main()
  24. {
  25. int s;
  26. cin>>n;
  27. for(int i=;i<=n;i++)
  28. cin>>s,
  29. add(i,s);
  30. cin>>m;
  31. for(int i=;i<=m;i++)
  32. {
  33. int x,y,w,z;
  34. cin>>w;
  35. if(w==)
  36. {
  37. cin>>x;
  38. cout<<find(x)-find(x-)<<endl;
  39. }
  40. if(w==)
  41. {
  42. cin>>x>>y>>z;
  43. for(int j=x;j<=y;j++)
  44. add(j,z);
  45. }
  46. }
  47. }

树状数组laekov的更多相关文章

  1. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

  2. bzoj1878--离线+树状数组

    这题在线做很麻烦,所以我们选择离线. 首先预处理出数组next[i]表示i这个位置的颜色下一次出现的位置. 然后对与每种颜色第一次出现的位置x,将a[x]++. 将每个询问按左端点排序,再从左往右扫, ...

  3. codeforces 597C C. Subsequences(dp+树状数组)

    题目链接: C. Subsequences time limit per test 1 second memory limit per test 256 megabytes input standar ...

  4. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2545  Solved: 1419[Submit][Sta ...

  5. BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]

    3529: [Sdoi2014]数表 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1399  Solved: 694[Submit][Status] ...

  6. BZOJ 3289: Mato的文件管理[莫队算法 树状数组]

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 2399  Solved: 988[Submit][Status][Di ...

  7. 【Codeforces163E】e-Government AC自动机fail树 + DFS序 + 树状数组

    E. e-Government time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...

  8. 【BZOJ-3881】Divljak AC自动机fail树 + 树链剖分+ 树状数组 + DFS序

    3881: [Coci2015]Divljak Time Limit: 20 Sec  Memory Limit: 768 MBSubmit: 508  Solved: 158[Submit][Sta ...

  9. 树形DP+DFS序+树状数组 HDOJ 5293 Tree chain problem(树链问题)

    题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...

随机推荐

  1. 开发笔记--java.lang.OutOfMemoryError: PermGen space异常处理

    第一次到公司开发项目,比起之前的小项目来说这次的项目特别大,以至于运行之后出现了java.lang.OutOfMemoryError: PermGen space的异常,从字面意思上来看是内存溢出的原 ...

  2. Python爬虫 —— 抓取美女图片

    代码如下: #coding:utf-8 # import datetime import requests import os import sys from lxml import etree im ...

  3. SqlServer 按逗号分隔

    SELECT ORDER_ID,LTRIM(MAX(SYS_CONNECT_BY_PATH(GOODS_NAME, ',')), ',') GOODS_NAME FROM (SELECT GOODS_ ...

  4. 虚拟化网络之OpenvSwitch

    OpenvSwitch简称OVS,官网(http://openvswitch.org/) OVS是一个高质量.多层的虚拟交换软件,即虚拟交换机. OpenvSwitch的见的相关组件: ovs-vsw ...

  5. 2-mybatis框架

    mybatis是一个持久层的框架,是apache下的顶级项目. mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需 ...

  6. 休假回来 更博-MySQL以月为单位的客户综合情况表_20161008

    十一休假老家事比较多 未来得及更新 今起依旧更博- 生成一个以用户ID为单位,各月下单天次,各月买了几个产品,各月订单额 ,天次,,天次,,天次,NULL)) AS 9月天次 FROM ( SELEC ...

  7. [转]ECMAScript5 Object的新属性方法

    虽然说现在并不是所有的浏览器都已经支持ECMAScript5的新特性,但相比于ECMAScript4而言ECMAScript5被广大浏览器厂商广泛接受,目前主流的浏览器中只有低版本的IE不支持,其它都 ...

  8. Python手记

    字符串的拼接 1.“+”,如果是字符和数字相连,要使用str()函数对于数字进行字符转化: 2.join() 3.",",链接的两个字符串之间用空格做关联 4.占位符 tmp += ...

  9. C#线程处理基本知识

    章节: 线程与线程处理 讨论多线程的优缺点,并概括了可以创建线程或使用线程池线程的几种情形. 托管线程中的异常 描述不同版本 .NET Framework 的线程中的未经处理的异常的行为,尤其是导致应 ...

  10. 推荐几个Laravel 后台管理系统

    小编推荐几个Laravel 后台管理系统 由百牛信息技术bainiu.ltd整理发布于博客园 一.不容错过的Laravel后台管理扩展包 —— Voyager 简介Voyager是一个你不容错过的La ...