随笔分类 - 数据结构--树状数组
摘要:https://www.luogu.org/problemnew/show/P3676 这题被我当成动态dp去做了,码了4k,搞了一个换根的动态dp 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 using namesp
阅读全文
摘要:二维线段树被卡M+T。。。于是去学二维树状数组区间更新区间查询 树状数组维护数列区间xor的修改、删除(就是把原问题改成一维): 以下p*i实际都指i个p相xor,即(i&1)*pa表示原数列d[i]表示a[i]^a[i-1],e[i]=d[i]*igetd(x)和gete(x)分别表示对d/e求前
阅读全文
摘要:https://www.cnblogs.com/gengchen/p/6530864.html 对于操作1,对于节点x的任意后代节点y,那么可以贡献a 对于操作2,对于节点x的任意后代节点y,那么可以贡献a*(dep[y]−dep[x]+1) 使用两个树状数组来维护贡献(贡献指某点到根的点权和) 其
阅读全文
摘要:Permutation UVA - 11525 看康托展开 题目给出的式子(n=s[1]*(k-1)!+s[2]*(k-2)!+...+s[k]*0!)非常像逆康托展开(将n个数的所有排列按字典序排序,并将所有排列编号(从0开始),给出排列的编号得到对应排列)用到的式子。可以想到用逆康托展开的方法。
阅读全文
摘要:参考:点击打开链接 区间修改+区间查询的树状数组,实际上是用两个树状数组来表示一个数组 用a[i]表示原数组, d[i]=a[i]-a[i-1](a[i]视为0) 关于 的说明: a[1]+a[2]+...+a[x] =d[1]+(d[1]+d[2])+(d[1]+d[2]+d[3])+...+(d
阅读全文
摘要:P1972 [SDOI2009]HH的项链 法一:树状数组,离线 翻译: 给出一个数列a[n]还有许多请求,请求由l,r两个数组成,要求对于每个请求输出数列中从a[l]到a[r]中不重复的数的个数。 方法: 首先读入数列a[n],并预处理next1,boo两个辅助数组,方法见程序。 然后读入请求,把
阅读全文
摘要:P1908 逆序对 法一:归并排序求逆序对(不好理解,记一下) (此处用的是从大到小排序,毕竟求的是序列中ai>aj且i<j的有序对) 在二路归并的时候,设l<=i<=mid,mid+1<=j<=r,要归并的是a[l]到a[mid]还有a[mid+1]到a[r]。只考虑a[l]到a[r]间产生的逆序
阅读全文

浙公网安备 33010602011771号