树状数组 1. 算法分析 树状数组作用 单点修改 区间查询 区间修改(加上差分) 核心思想 把前n个数划分为log(n)个区间,分别维护这log(n)个区间的和,在求解前缀和Sn的时候,从求解n个数字的和变成求解log(n)个区间的和来加快运算 具体操作 维护log(n)个区间,每个区间用数组c来维 ...
分类:
编程语言 时间:
2020-06-09 16:13:22
阅读次数:
60
首先,我们规定两个相邻二进制数的“差值”为对应位数不同的个数(eg:01与10的差值为2,011与100的差值为3),然后,如果我们再对相邻两个二进制数进行异或运算,它的结果将会是下面这图这样的。然后,如果我们把他们两个的值放入到树状数组中,就会发现它完美的符合树状数组的运算(差值即为树状数组中的A ...
分类:
编程语言 时间:
2020-06-06 09:23:47
阅读次数:
65
题目: 分析: 良心出题人给超多部分分(错乱 又是喜闻乐见的把线段$(x,y)\(放到平面坐标系的点\)(x,y)$上,我们尝试得到这个点上的值 我们改变一个单位线段$x$的状态,考虑它的影响范围,在线树状数组之类的数据结构维护连续$1$的线段,可以得出一个下标$x$的影响范围$(l,r)$ 改变这 ...
分类:
其他好文 时间:
2020-06-04 22:02:45
阅读次数:
84
题目链接:https://ac.nowcoder.com/acm/problem/13947 题目大意:有n个队伍参加三场比赛,如果队伍x有一场比赛赢了队伍y,y也有一场比赛赢了x,就算一组,求有多少组。 思路:这里我用了树状数组求逆序对的方法,先对第一场比赛进行排序,然后求第二场和第三场的逆序对, ...
分类:
编程语言 时间:
2020-06-04 13:32:15
阅读次数:
60
1.摘要: 关于LIS部分,本篇博客讲一下LIS的概念定义和理解,以及求LIS的三种方法,分别是O(n^2)的DP,O(nlogn)的二分+贪心法,以及O(nlogn)的树状数组优化的DP,最后附上几道非常经典的LIS的例题及分析。 2.LIS的定义: 最长上升子序列(Longest Increas ...
分类:
其他好文 时间:
2020-06-04 01:48:57
阅读次数:
91
今天看了这篇博客,感觉对树状数组讲的非常透彻,存一下链接方便以后忘了看_(:з」∠)_ https://www.cnblogs.com/xenny/p/9739600.html 记录一下关键代码和注释 //lowbit计算2的k次方的值,k为 i 从最低位到最高位的连续0的个数 int lowbit ...
分类:
编程语言 时间:
2020-06-04 01:45:04
阅读次数:
80
地址:http://poj.org/problem?id=2182 题意: N头奶牛排队,它们的身高为1~n,已知每头牛前面有多少头比自己矮,求每头牛的身高。 解析: 输入其实是从i=2开始的 暴力代码:跑了438M #include<iostream> #include<cstdio> using ...
分类:
编程语言 时间:
2020-06-04 01:02:04
阅读次数:
64
http://acm.hdu.edu.cn/showproblem.php?pid=2689 #include<bits/stdc++.h> #define low(x) (x&(-x)) using namespace std; const int maxn=1e5+5; typedef long ...
分类:
编程语言 时间:
2020-05-28 13:40:31
阅读次数:
88
https://ac.nowcoder.com/acm/problem/20861 #include<bits/stdc++.h> #define low(x) (x&(-x)) using namespace std; const int N=1e5+5; typedef long long ll ...
分类:
编程语言 时间:
2020-05-28 11:36:20
阅读次数:
78
LINK:Multiset 主要点一下 二分和树状数组找第k大的做法. 线段树的做法是平凡的 开一个数组实现就能卡过. 考虑如树状数组何找第k大 二分+查询来判定是不优秀的。 考虑树状数组上倍增来做. 考虑从0开始跳 定义跳到的节点为前缀和. 那么不断跳累加权值即可. 第三种做法是二分 (其实我最先 ...
分类:
编程语言 时间:
2020-05-25 22:22:15
阅读次数:
81