树状数组成段更新模板
这个成段的编写复杂度很低,不需要加大空间复杂度,便于处理成段加,询问每个位置的值的操作:
#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
树状数组成段更新模板相关推荐
- poj 3486 A Simple Problem with Integers(树状数组第三种模板改段求段)
1 /* 2 树状数组第三种模板(改段求段)不解释! 不明白的点这里:here! 3 */ 4 #include<iostream> 5 #include<cstring> 6 ...
- CodeForces 390E Inna and Large Sweet Matrix(树状数组改段求段)
CodeForces 390E Inna and Large Sweet Matrix(树状数组改段求段) 树状数组仅仅能实现线段树区间改动和区间查询的功能,能够取代不须要lazy tag的线段树.且 ...
- HDU 1166 敌兵布阵 树状数组小结(更新)
树状数组(Binary Indexed Tree(BIT), Fenwick Tree) 是一个查询和修改复杂度都为log(n)的数据结构.主要用于查询任意两位之间的所有 元素之和,但是每次只能修改一 ...
- POJ3468--A Simple Problem with Integers--线段树/树状数组 改段求段
题目描述 You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type ...
- 树状数组基础原理与模板
树状数组 2021年7月29 1.算法原理 树状数组解决什么问题? 解决区间上点更新与维护的问题.如更改某些点值求区间和,或求某位前有多少比其小的问题. 其实现的原理是什么? 首先看图: 在这个图中, ...
- 树状数组求区间和模板 区间可修改 参考题目:牛客小白月赛 I 区间
从前有个东西叫树状数组,它可以轻易实现一些简单的序列操作,比如单点修改,区间求和;区间修改,单点求值等. 但是我们经常需要更高级的操作,比如区间修改区间查询.这时候树状数组就不起作用了,只能选择写一个 ...
- hdu 4970 树状数组 “改段求段”
题意:塔防.给1--n,给出m个塔,每个塔有攻击力,给出k个怪兽的位子和血量,问有几只可以到达n点. 今天刚刚复习了树状数组,就碰到这个题,区间更新.区间求和类型.第三类树状数组可以斩. 注意一下大数 ...
- [HDOJ4027]Can you answer these queries?(线段树,特殊成段更新,成段查询)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4027 RT,该题要求每次更新是更新所有节点,分别求平方根,查询是求和.昨晚思前想后找有没有一个数学上的 ...
- POJ2528 线段树+离散化+hash(成段更新)
题目:Mayor's posters 题意:在墙上贴海报,海报可以互相覆盖,问最后可以看见几张海报 思路:这题数据范围很大,直接搞超时+超内存,需要离散化: 离散化简单的来说就是只取我们需要的值来用, ...
最新文章
- Android 对BaseAdapter做优化处理
- 数据结构与算法分析——引论
- ap计算机科学换学分,科普:AP成绩出来了 换学分最全指南就在这
- 面试题整理 2:求链表倒数第 k 个结点
- 【NLP】N-LTP:基于预训练模型的中文自然语言处理平台
- Qt Creator设置一个Autotools项目
- Tomcat设置Http自动跳转Https
- 《剑指offer》字符流中第一个不重复的字符
- 大话数据结构15 : 线索二叉树
- mac上的更新node npm
- oracle rac添加用户组,oracle 11g rac 与 oracle 10 rac所需要建立的组和用户
- 【转】php利用mkdir创建多级目录
- 「R」ggplot2拼图包patchwork推荐与使用
- deeplung代码实现主题讲解
- Ubuntu不能挂载移动硬盘问题Error mounting /dev/sda1 at /media/XXXX: Command-line `mount -t ntfs -o
- linux账号权限管理
- Ubuntu 12.04 下安装 Eclipse
- 暴风影音2009 去广告的方法
- python王者战斗_把英雄分类,看 Python 带你上王者
- 苹果手机itunes显示无法连接服务器,苹果手机无法连接到iTunes Store怎么办 连接失败解决方法...
热门文章
- 文件逆顺输出到新文件(三种方案)
- Vue面试题汇总目录
- 前端学习(3252):react脚手架
- 工作405-关于vue组件开发过程中一直报错:This relative module was not found:
- [html] html的img标签为什么要添加alt属性呢?
- 前端学习(1709):前端系列javascript之uniapp
- 前端学习(549):node的 http模块
- mybatis学习(47):嵌套查询--一对一
- 第三十八期:美国数据隐私保护法案来临,明年1月生效,现仅2%企业合规
- 22.jsp动作元素