随笔分类 -  树状数组

摘要:思路:很容易就能想到统计没两对点之间的未匹配点的个数。 在想怎么用数据结构维护这个东西, 没有想到用树状数组能很巧妙地维护出来, 就写了个莫队。。。 莫队:暴力维护就好了。 树状数组: 对于第一次遇到的数a[ i ], 我们往 i 位置加1, 对于第二次遇到的数,我们往 pre[ a[ i ] ] 阅读全文
posted @ 2018-06-15 15:28 NotNight 阅读(122) 评论(0) 推荐(0) 编辑
摘要:疯狂re 换了一种写法才过。。。 思路:将x轴离散化,处理出来每个点上下左右一个有多少个点, 对于同一行的两个点来说,他们之间的 这些空的点都是可以一起算的,我们用树状数组按y轴从小到大维护 每一列的贡献和。。 阅读全文
posted @ 2018-06-03 16:45 NotNight 阅读(106) 评论(0) 推荐(0) 编辑
摘要:思路:好难想啊, 考虑到应该从每个数字只有5个数字下手, 但是不知道到底该怎么写。。 首先我们将第一个串按数字的种类分类, 每一类里面有5个, 然后将第二个串里面的数字一个一个加,如果一个加入的第 i 个数为5, 那么也只会对第一个串中的 5 产生影响, 如果第一个串中5的位置为pos, 那么显然d 阅读全文
posted @ 2018-05-31 21:26 NotNight 阅读(115) 评论(0) 推荐(0) 编辑
摘要:题目大意:有一棵树根为1,刚开始每条边的权值为1, 现在有m + n - 1 个操作, A :x y , 将x和y相连的边权值变为1, W:x, 询问x到1路径上的权值和。 思路 : 方法一: 用dfs序建立树状数组, 每个点入栈位置的值为1, 出栈为-1, 询问的值就是sum( l [ x ] ) 阅读全文
posted @ 2018-05-07 21:23 NotNight 阅读(148) 评论(0) 推荐(0) 编辑
摘要:#include #define read(x) scanf("%d",&x) using namespace std; const int N=1e6+7; struct BIT { int a[N]; void modify(int pos,int v) { for(int i=pos;i0;i-=i&-i) ans+=a[i]... 阅读全文
posted @ 2018-02-05 14:08 NotNight 阅读(153) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示