2019.7.15-7.20暑假集训总结
// 7.18前三天的等我周日再继续复习总结orz _(:з」∠)_每一天都是充实的欧 7.15:差分与前缀和 7.16: 倍增与ST表 7.17:并查集进阶 7.18:树状数组与线段树 树状数组: 1 .引入lowbit(x) int lowbit(int i) { } -11=(0100+1)=0101 &1011 树状数组 c[x],比如c[4], 4的二进制是(100),100刚好是3位数, 所以这个树状数组到c[4]为止 高度 是3。 除了树根,c[x]的 父节点为 c[x+lowbit(x)] 能用树状数组尽量用树状数组,快,省空间。( 一般用来单点更新,区间求和,维护最大值二不能维护最小值。 但是 求区间最大值的时候复杂度比较高 容易TLE,这个时候还是需要用到 线段树 ) “细细观察二进制 树状数组追其根本就是二进制的应用” 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int M =100000+100; 4 int n,t; 5 int a[M],C[M]; 6 int lowbit(int x) 7 { 8 return x&(-x); 9 } 10 int sum(int x) 11 { 12 int ret=0; 13 while(x) 14 { 15 ret+=C[x]; 16 x-