这个成段的编写复杂度很低,不需要加大空间复杂度,便于处理成段加,询问每个位置的值的操作:

#include <bits/stdc++.h>
using namespace std ;
typedef long long ll ;
typedef long double ld ;
typedef unsigned long long ull ;
#ifdef _WIN32
#define LLD "%I64d"
#else
#define LLD "%lld"
#endif
#define pi (acos(-1.0))
#define F first
#define S second
#define lson (o<<1),l,mid
#define rson (o<<1|1),mid+1,r
#define MP make_pair
const double eps = 1e-9 ;
const int inf = 0x3f3f3f3f ;
const ll INF = (ll)4e18 ;const int M = (int)1e5+10 ;
struct BIT {ll u[M] ;int n ;void clr(int _n) { n = _n ;memset (u,0,sizeof(int)*(n+1)) ;}void add (int x , ll v) {for (; x<=n ; x += x&-x) u[x] += v ;}void add (int l , int r , ll v) {add(l,v) ; add(r+1,-v) ;}ll get (int x , ll ret=0) {for (; x>0 ; x -= x&-x) ret += u[x] ;return ret ;}
}bit ;int main () {int a[20] = {0,3,7,4,8,9,11,5,4,9,1} ;for (int i=1 ; i<=10 ; i++) printf ("%-4d" , a[i]) ; puts ("");bit.clr (10) ;for (int i=10 ; i>0 ; i--) {a[i] = a[i]-a[i-1] ;bit.add(i,i,a[i]) ;}for (int i=1 ; i<=10 ; i++) printf ("%-4d",a[i]) ; puts ("");for (int i=1 ; i<=10 ; i++) printf ("%-4d" , bit.u[i]) ; puts ("") ;int Q ;scanf ("%d" , &Q) ;while (Q --) {int x ;scanf ("%d" , &x) ;printf ("%d\n" , bit.get(x) ) ;}return 0 ;
}

  

转载于:https://www.cnblogs.com/get-an-AC-everyday/p/5438755.html

树状数组成段更新模板相关推荐

  1. poj 3486 A Simple Problem with Integers(树状数组第三种模板改段求段)

    1 /* 2 树状数组第三种模板(改段求段)不解释! 不明白的点这里:here! 3 */ 4 #include<iostream> 5 #include<cstring> 6 ...

  2. CodeForces 390E Inna and Large Sweet Matrix(树状数组改段求段)

    CodeForces 390E Inna and Large Sweet Matrix(树状数组改段求段) 树状数组仅仅能实现线段树区间改动和区间查询的功能,能够取代不须要lazy tag的线段树.且 ...

  3. HDU 1166 敌兵布阵 树状数组小结(更新)

    树状数组(Binary Indexed Tree(BIT), Fenwick Tree) 是一个查询和修改复杂度都为log(n)的数据结构.主要用于查询任意两位之间的所有 元素之和,但是每次只能修改一 ...

  4. POJ3468--A Simple Problem with Integers--线段树/树状数组 改段求段

    题目描述 You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type ...

  5. 树状数组基础原理与模板

    树状数组 2021年7月29 1.算法原理 树状数组解决什么问题? 解决区间上点更新与维护的问题.如更改某些点值求区间和,或求某位前有多少比其小的问题. 其实现的原理是什么? 首先看图: 在这个图中, ...

  6. 树状数组求区间和模板 区间可修改 参考题目:牛客小白月赛 I 区间

    从前有个东西叫树状数组,它可以轻易实现一些简单的序列操作,比如单点修改,区间求和;区间修改,单点求值等. 但是我们经常需要更高级的操作,比如区间修改区间查询.这时候树状数组就不起作用了,只能选择写一个 ...

  7. hdu 4970 树状数组 “改段求段”

    题意:塔防.给1--n,给出m个塔,每个塔有攻击力,给出k个怪兽的位子和血量,问有几只可以到达n点. 今天刚刚复习了树状数组,就碰到这个题,区间更新.区间求和类型.第三类树状数组可以斩. 注意一下大数 ...

  8. [HDOJ4027]Can you answer these queries?(线段树,特殊成段更新,成段查询)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4027 RT,该题要求每次更新是更新所有节点,分别求平方根,查询是求和.昨晚思前想后找有没有一个数学上的 ...

  9. POJ2528 线段树+离散化+hash(成段更新)

    题目:Mayor's posters 题意:在墙上贴海报,海报可以互相覆盖,问最后可以看见几张海报 思路:这题数据范围很大,直接搞超时+超内存,需要离散化: 离散化简单的来说就是只取我们需要的值来用, ...

最新文章

  1. Android 对BaseAdapter做优化处理
  2. 数据结构与算法分析——引论
  3. ap计算机科学换学分,科普:AP成绩出来了 换学分最全指南就在这
  4. 面试题整理 2:求链表倒数第 k 个结点
  5. 【NLP】N-LTP:基于预训练模型的中文自然语言处理平台
  6. Qt Creator设置一个Autotools项目
  7. Tomcat设置Http自动跳转Https
  8. 《剑指offer》字符流中第一个不重复的字符
  9. 大话数据结构15 : 线索二叉树
  10. mac上的更新node npm
  11. oracle rac添加用户组,oracle 11g rac 与 oracle 10 rac所需要建立的组和用户
  12. 【转】php利用mkdir创建多级目录
  13. 「R」ggplot2拼图包patchwork推荐与使用
  14. deeplung代码实现主题讲解
  15. Ubuntu不能挂载移动硬盘问题Error mounting /dev/sda1 at /media/XXXX: Command-line `mount -t ntfs -o
  16. linux账号权限管理
  17. Ubuntu 12.04 下安装 Eclipse
  18. 暴风影音2009 去广告的方法
  19. python王者战斗_把英雄分类,看 Python 带你上王者
  20. 苹果手机itunes显示无法连接服务器,苹果手机无法连接到iTunes Store怎么办 连接失败解决方法...

热门文章

  1. 文件逆顺输出到新文件(三种方案)
  2. Vue面试题汇总目录
  3. 前端学习(3252):react脚手架
  4. 工作405-关于vue组件开发过程中一直报错:This relative module was not found:
  5. [html] html的img标签为什么要添加alt属性呢?
  6. 前端学习(1709):前端系列javascript之uniapp
  7. 前端学习(549):node的 http模块
  8. mybatis学习(47):嵌套查询--一对一
  9. 第三十八期:美国数据隐私保护法案来临,明年1月生效,现仅2%企业合规
  10. 22.jsp动作元素