随笔分类 - 树状数组
摘要:Rose 用维护区间最长连续1的方法就可以维护 但是还要维护一下最左边,不过这问题不大 维护一个区间最长连续子段,不在意位置就可以了 然后就可以在查询的时候,先看一看在不在左边,在看一看在不在中间,最后看一看在不在右边 就解决了 可见学线段树靠背模板是不行的 #include<iostream> #
阅读全文
摘要:Jennie 很有意思 首先贪心的对每一个a中字符匹配B中出现的第一个对应未匹配字符,这样的话就有了顺序 然后每一次的操作是交换相邻的字符,很像某种求逆序对方式对不对 然后这个题就是求逆序对 #include<iostream> #include<cstdio> #include<algorithm
阅读全文
摘要:Jennie 似乎对于每一个不等式,都是有一个阈值k,那么分类讨论a的符号,也就是不等式的方向,因为输入的key的大小不超过,那么一些算出来的key可以知道肯定满足、不满足 然后呢,根据不等式的方向扔到两个树状数组,查询即可 #include<iostream> #include<cst
阅读全文
摘要:P1908 逆序对 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 树状数组可以干这个事情 树桩数组维护一个下标啦 然后离散化一下,sort,unique,二分确定每一个数在新序列的下标 也就是第i个数大小的排名。 然后算一下有多少个数,拍在他前面且大小排名在它之前。 #inclu
阅读全文
摘要:Archie 显然是要求逆序对的,这东西当然可以用树状数组求就可以了 然后呢,对于每一个点i,它为后面的点的话,那的时候就会有贡献 扫就行了 #include<iostream> #include<cstdio> #include<algorithm> #define ll long lo
阅读全文
摘要:Aimee 应该用线段树的,但是用树状数组就行 反正开方这个东西只能单点修改 最后用并查集优化一下 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #define in
阅读全文
摘要:Aimee 这么个线段树版子还要解释 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define int long long using namespace std; int n,m; int f
阅读全文
摘要:让A,b序列中大小排名相对应即可 若A中第j大的位于i,则应该b中第j大位于i 证明:假如a1<a2,b1<b2 则排列方式有 a1,a2,b1,b2或 a1,a2,b2,b1那么 对于这两种情况上,平方并做差,即可得以上结论 然而大问题是这样离散化后怎么搞出交换几次呢 离散化后 \(c_{a_i}
阅读全文
摘要:Miku 画一画图就能知道规律 倘若询问区间是偶数 画图可知,答案为零 为奇数,则为 ^······· 然后奇数偶数分别开一个 树状数组 就行了 #include<iostream> #include<cstdio> #include<algorithm>
阅读全文