
树状数组
Mys_C_K
人生有许多道:曾经踏足的是道,即将踏往的也是道,那什么才是道呢?唯有脚下走的才是道。一切精神或者物质都归于虚无,然后从混沌中衍生出三万道。在悲喜间涉足一条无数前人经历过,且将有无数后人奔赴的道,无论是否已经或者将要到达彼岸,然后便不再回头或是左顾右盼,即使有些道繁盛至极,夜灯如昼,无数人一浪又一浪的涌去,造就了世人皆知的辉煌;即使有些道草木凋敝,荒草丛生,只等勇敢的开拓者斩开荆棘,创造一片天地;这些都无所关,无所在意,彼岸何如、来日何方甚至过往旧事都化作一缕云烟,飘渺碧霄,我自撷高山之月色,独随足落处往行。
展开
-
vijos 1448 校门外的树 - 树状数组
请自行搜索题目大意:维护n个位置,支持新建一段区间,查询某一段区间与已加入的多少区间有交。题解:神题啊假设询问区间为[s,t],那么区间[a,b]与[s,t]相交,必要条件是a因此维护两个bit分别维护左右端点,每次询问[s,t]那么答案就是query_in_left(t)-query_in_right(s-1)代码:#include#include#include原创 2017-06-26 19:57:54 · 939 阅读 · 0 评论 -
信心 - 平衡树 - 树状数组
题目大意:维护n个集合(不可重),每次区间insert一个数字x或者求区间集合大小之和。题解:对每个x维护一个set表示当前那些段是空的即可。#include<bits/stdc++.h>#define rep(i,a,b) for(int i=a;i<=b;i++)#define Rep(i,v) rep(i,0,(int)v.size()-1)#define lin...原创 2018-12-05 09:19:12 · 253 阅读 · 0 评论 -
序列 - BIT
题目大意:给你一个序列,问有多少长度在[L2,R2]子区间的中位数在[L1,R1]之间。题解:这个中位数是可以差分的[1,R1]-[1,L1)。solve(x)。将&lt;=x看做1,其余看做-1。然后根据区间长度奇偶性判定为区间前缀和&gt;0或者&gt;=0。扫描线+树状数组即可。(其实算不上扫描线)。#include&lt;bits/stdc++.h&gt;#define g...原创 2018-11-03 11:45:14 · 252 阅读 · 0 评论 -
bzoj 3881 - AC自动机 - BIT
题目大意:一开始给定若干字符串。每次往集合中塞一个字符串或者询问开始给定的字符串在多少集合中的串出现过。题解:显然跑AC自动机,然后在fail树上做链并,这个就按dfs序排序后upd(x,1),upd(lca(x,las),-1)即可,每次询问查子树和即可一个log。然后……实测每次暴力往上条单词节点跑的非常快,据说可能是根号的复杂度,不是很清楚,总之很难卡。一个log的:#include...原创 2018-10-24 17:02:00 · 305 阅读 · 0 评论 -
bzoj 3730 震波 - 动态点分治 - BIT
垃圾卡常题bz上过不了#include&lt;bits/stdc++.h&gt;#define gc getchar()#define rep(i,a,b) for(int i=a;i&lt;=b;i++)#define Rep(i,v) rep(i,0,(int)v.size()-1)#define lint long long#define N 100010#define db ...原创 2018-10-26 21:29:24 · 195 阅读 · 0 评论 -
疯狂求导 - BIT - 主席树
题目大意就是区间push_back一个数字,求区间不严格第K大之类的,强制在线。然后你直接像区间加区间求和的BIT那样差分后维护自己和自己乘以下标即可,O(mlg2n)O(m\lg^2n)O(mlg2n)。#include<iostream>#include<cstring>#include<cstdio>#include<algorithm&g...原创 2018-09-18 13:26:41 · 158 阅读 · 0 评论 -
巧克力之树 - 点分治 - 树状数组 - LCT
题目大意:给一颗边有权的树,求有多少路径满足边权最大值减去最小值不超过k,1e5。 题解:用BIT维护点分治过程中的二维数点或者直接LCT即可。 点分治#include&amp;amp;lt;iostream&amp;amp;gt;#include&amp;amp;lt;cstring&amp;amp;gt;#include&amp;amp;lt;cstdio&amp;amp;gt;#include原创 2018-09-02 14:44:27 · 262 阅读 · 0 评论 -
ARC 068 e Snuke Line - 树状数组
观察到长度>=d的区间一定包含某个kd,否则最多包含一个kd。#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<vector>#define N 300010#define gc getchar()#defi...原创 2018-08-21 20:57:02 · 239 阅读 · 0 评论 -
奇怪的树 - BIT - 树剖
题目大意:给一颗有根树,每个点是黑色或者白色,支持:翻转一个点的颜色,翻转所有与给定点距离为奇数的点的颜色,求所有黑点与给定点的lca的编号之和。2e5。 题解:首先考虑没有2咋做,类似与动态dp,先树剖一下,然后每个点维护轻边的所有信息,询问的时候有点像是LCT的切换轻重边。考虑如果是翻转整个树的颜色咋做,显然不仅维护黑点同时维护白点的答案,每次翻转整棵树就直接交换两个数组。因为还有距离为奇数...原创 2018-08-30 17:07:35 · 426 阅读 · 0 评论 -
AGC 006 E Rotate 3x3 - 树状数组
先把奇怪的情况判掉。 首先列在逆序对的问题上独立,其次一个显然的必要条件是偶数列的倒转奇偶性应该和奇数列的逆序对数的奇偶性相同,其次玩一玩就会发现这个是充分的。#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#define Asrt(x) if(...原创 2018-08-16 15:48:15 · 332 阅读 · 0 评论 -
[学习笔记]CDQ分治 bzoj1176 [Baltic2007] Mokia
题目大意:支持单点修改和矩阵查询,n显然不能树套树之类的,空间复杂度飞起。 学CDQ分治,过程很好理解,就是先递归处理两部分,然后合并。 思想上就是每个询问只依赖于之前的修改并且可以独立考虑修改。 即修改的贡献是互不影响的。这种情况下可以这么分治,用一个log的代价改成先给你一些修改剩下的都是询问的问题。 这个题这样转化之后就变成了经典的扫描线问题不再赘述。 代码:#inclu原创 2018-01-31 20:13:01 · 370 阅读 · 0 评论 -
Monkeying Around 线段树+树状数组
题目大意,给定若干(Li, Ri, Ki)表示Li到Ri的人都得到一个标号为ki的球,依次进行。n个人每个人有一个状态0或者1,如果在这次操作前已经有过ki这种球了,那么状态会变成0,否则变成1.初始的时候都是0.求m次操作后有多少个0. 题解:一开始想错了,后来发现是个傻逼提。唯一需要考虑的性质是,每个人的最终状态 基 本 上 由最后一次覆盖到他的操作的ki决定。(题面是经过一点点转化的,原创 2017-12-25 21:11:41 · 435 阅读 · 0 评论 -
POJ 2763 Housewife Wind - LCA - 树状数组
传送门题目大意:给定一棵树,支持修改边权和查询两点距离。显然可以链剖去做。但是注意到dis(x,y)=dis(1,x)+dis(1,y)-2*(dis(1,LCA(x,y)))。然后修改到x的边的边权等价于让x子树中的所有点的dis(1,y)+=c。然后显然可以用BIT维护。#include#include#include#include#define MAXN 1原创 2017-07-15 16:06:45 · 393 阅读 · 0 评论 -
全连 - dp - BIT - 扫描线
题目大意:有n个三元组(i,ti,vi)(i,t_i,v_i)(i,ti,vi),你要选出一些三元组使得对于任意选出的(i,ti,vi)(i,t_i,v_i)(i,ti,vi)和(j,tj,vj),i&lt;j(j,t_j,v_j),i&lt;j(j,tj,vj),i<j,满足i≤j−tj,i+ti≤ji\le j-t_j,i+t_i\le ji≤j−tj,i+...原创 2019-03-13 16:50:53 · 296 阅读 · 0 评论