随笔分类 - 算法
摘要:这题可以用线段树做,不过正解恐怕是动态点分治?(点分树) 简单介绍下动态点分治的概念:在点分治的过程中,一般我们面对的问题都是静态的。如果涉及到修改这类的操作,我们就希望找到我们是如何处理到当前的修改点的,换而言之,我们希望记录下点分治的过程,这样可以通过爬点分树等操作消除影响。 对于每个节点我们保
阅读全文
摘要:看这题网上居然还没人写blog,怕是都去看洛谷自带的了…… 你才是字符串!你全家都是字符串!这题跟字符串没多大关系,只是出题人lxl想要吐槽某中学而已……、、、 其实这题说白了就是问区间里出现最多的数出现了多少次,上去就莫队就行…… 不过要注意离散化。 虽然lxl很sxbk,不过能想到这些题目,把题
阅读全文
摘要:lxl丧心病狂…… 首先允许离线的区间询问一看就是莫队。那么我们看下怎么莫队? 不会。 “由乃题多半是不可做的。”于是我看了下题解……好吧果然是 bitset 用bitset维护当前出现了哪些数。对于差为x,可以将其左移然后和本身取并集,和为x,我们可以翻转这个bitset,然后左移取并集就好了。对
阅读全文
摘要:一眼又是个莫队…… 首先看这时间/空间复杂度,线段树/主席树就别想了…… 然后么……zcy就有点傻了…… 于是zcy看了下hzwer,感觉受教育了。 分块的调块大小真是玄学设计。 有没有一种方法在修改上能够比线段树更快,同时又能相比暴力较快地回答询问呢? 我们可以用分块,把序列分成$nsqrt(n)
阅读全文
摘要:首先允许离线,一眼莫队…… 然后考虑对于每次移动,这不就是让你求逆序对嘛(QAQ) 考虑怎么移动? 那么每次移动的时候我拿树状数组查询一下就好,注意要离散化。 1 #include<bits/stdc++.h> 2 #define N 50005 3 #define inf 1000000007 4
阅读全文
摘要:我以为树分块什么的必有高论,结果居然是个暴力…… 方法也很简单,我看下每个节点dfs的时候是否已经大于k个,大于的话我就新开一块。 注意dfs的时候当前节点不能放进子树的块中。
阅读全文
摘要:三维偏序是一个很经典的东西啊。 //结果蒟蒻我居然是先写的四维的? 第一位排序当作限制,然后cdq分治+树状数组统计就好。写起来很快的啊。 题目:bzoj3262 陌上花开 1 #include<bits/stdc++.h> 2 #define N 100005 3 using namespace
阅读全文
摘要:1 #include 2 #define N 100005 3 using namespace std; 4 char s[N]; 5 int a[N],c[N],t1[N],t2[N],sa[N],rk[N],ht[N]; 6 int m,n,p; 7 void calcsa(int n,int m){ 8 int *x=t1,*y=t2,f=0,p=0; 9 ...
阅读全文
摘要:三分法其实是很naive的东西…… 但是不知道为什么蒟蒻我之前一直没空学…… 大概就是求一类单峰的函数,每次把区间三分(以求极小值举例),如果$f(mid1)<f(mid2)$说明解在$[L,mid2]$中,反之解在$[mid2,R]$中。 裸题1:LA 5009 裸题2:洛谷模版
阅读全文
摘要:我也不知道为啥这要起这名,完完全全没看到并查集的影子啊…… 实际上原理就是一个树上的启发式合并。 特点是可以在$O(nlogn)$的时间复杂度内完成对无修改的子树的统计,复杂度优于莫队算法。 局限性也很明显:1.不能支持修改 2.只能支持子树统计,不能链上统计。(链上统计你不能直接树剖吗?) 那么它
阅读全文

浙公网安备 33010602011771号