随笔分类 -  数据结构—树状数组

摘要:整体二分: 对于每一个修改操作,标记为1,并且加一个标记为 1的这个位置原来值,并且对于a数列每个点都当成修改操作 然后整体二分,扫当前操作区间lr,把在值域区间标记为1和 1的操作都在树状数组对应位置上加/减出来,然后询问操作根据k和询问答案大小决定放在哪部分传下去 cpp include inc 阅读全文
posted @ 2019-04-22 10:27 lokiii 阅读(173) 评论(0) 推荐(0)
摘要:脑子一抽开始写主席树,敲了一会发现不对…… 整体二分,用二维树状数组维护值为当前区间的格子个数,然后根据k的大小和当前询问的子矩阵里的值和k的大小关系来决定这个询问放在哪一部分向下递归 cpp include include include using namespace std; const in 阅读全文
posted @ 2019-04-22 08:01 lokiii 阅读(166) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-03-25 20:24 lokiii 阅读(5) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-03-04 22:43 lokiii 阅读(8) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-01-16 10:32 lokiii 阅读(9) 评论(0) 推荐(0)
摘要:顾不得山又高, 这水又深, 山高水深, 路途遥远, 我忍饥挨饿来寻将军。 阅读全文
posted @ 2018-10-29 16:44 lokiii 阅读(108) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2018-10-29 15:17 lokiii 阅读(2) 评论(0) 推荐(0)
摘要:果てしなく 道は続いて見えるけれど この両手は 光を抱ける 阅读全文
posted @ 2018-10-26 17:17 lokiii 阅读(161) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2018-10-10 21:04 lokiii 阅读(3) 评论(0) 推荐(0)
摘要:僕は幽霊だ 本当さ 君の目には見えないだろうけど 阅读全文
posted @ 2018-09-25 08:59 lokiii 阅读(168) 评论(0) 推荐(0)
摘要:很明显的暗示,就是在树的dfs序上维护树状数组,加减的时候差分即可 cpp include include include include using namespace std; const int N=500005; int n,m,h[N],cnt,s[N],top,tot,t[N],fa[N 阅读全文
posted @ 2018-09-13 17:31 lokiii 阅读(130) 评论(0) 推荐(0)
摘要:首先很容易计算对于一个如意郎君列表里有x个男性的女性,编号排第i位的男性被选的概率是 $$ p (1 p)^{i 1}+p (1 p)^{i 1+n}+p (1 p)^{i 1+n}+… $$ $$ =p ((1 p)^{i 1}+(1 p)^{i 1+n}+(1 p)^{i 1+n}+…) $$ 阅读全文
posted @ 2018-09-13 15:06 lokiii 阅读(156) 评论(0) 推荐(0)
摘要:离线,按照l排序 注意到在区间里出现两次的颜色才有贡献,所以记录一个ne[i]表示i后第一个和i同色的花,维护一个l,每次处理询问的时候l单调右移,树状数组维护,在ne[ne[i]]位置++,在ne[i]位置 (因为这里已经++过了),这样区间查询的时候如果右端点超过ne[ne[i]]就能对答案有贡 阅读全文
posted @ 2018-09-07 09:21 lokiii 阅读(87) 评论(0) 推荐(0)
摘要:对于一个lr,每个颜色贡献的是在(1,r)区间里出现的最右位置,所以记录一个b数组表示当前点这个颜色上一个出现的位置 然后把询问离线,按r升序排序 每次把右端点右移,把这个点在树状数组上+1,并且在当前这个点的b位置上 1(表示没用了),然后树状数组前缀和减一下即可 ~~我写的~~莫队会T cpp 阅读全文
posted @ 2018-07-29 10:08 lokiii 阅读(141) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2018-07-13 22:37 lokiii 阅读(2) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2018-07-05 11:13 lokiii 阅读(4) 评论(0) 推荐(0)
摘要:思路还是挺好玩的 首先简单粗暴的想法是dfs然后用离散化权值树状数组维护,但是这样有个问题就是这个全局的权值树状数组里并不一定都是当前点子树里的 第一反应是改树状数组,但是显然不太现实,但是可以这样想,就是现在统计子树之前把查到的答案减去,然后再查子树最后加上查到的答案,这样相当于去重了 方便起见, 阅读全文
posted @ 2018-06-19 18:27 lokiii 阅读(105) 评论(0) 推荐(0)
摘要:把长度转成右端点,按右端点排升序,f[i]=max(f[j]&&r[j] include include using namespace std; const int N=100005; int n,t[N],f[N],ans; struct qwe { int l,r; }a[N]; bool c 阅读全文
posted @ 2018-05-08 21:26 lokiii 阅读(121) 评论(0) 推荐(0)
摘要:最长上升子序列。虽然数据可以直接n方但是另写了个nlogn的 转移:f[i]=max(f[j]+1)(a[j] include using namespace std; const int N=5005; int n,a[N],f[N],ans; int read() { int r=0,f=1; 阅读全文
posted @ 2018-04-27 21:26 lokiii 阅读(232) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2018-03-15 11:28 lokiii 阅读(1) 评论(0) 推荐(0)