
算法学习
文章平均质量分 79
Zeyu_King
蒟蒻代码风格巨丑,神犇勿喷:)
展开
-
[BZOJ 1176]Balkan2007 Mokia cdq分治一血!
久仰cdq(分治)大名,今日才来造访,礼数不周也。。。。。(发个牢骚~)所谓cdq分治,就是分治所有操作,计算[l,mid]中的修改对[mid+1,r]中的询问的影响。无法理解的同学可以借助归并排序的思想思考。抄袭别人讲以上的话吧1、T(n)=2T(n/2)+O(kn)的解是T(n)=O(kn log n) 2、T(n)=2T(n/2)+O(kn log n)的解是T(n)=O原创 2015-01-15 22:15:52 · 567 阅读 · 0 评论 -
[ural 1960] Palindromes and Super Abilities
继续练习模版。回文树。。。#include #include #include using namespace std;const int Maxn=100005;char S[Maxn];int len[Maxn],ans[Maxn],fail[Maxn];int son[Maxn][26],n,st,p,c,last,i,t;int newnode(int x){原创 2015-04-09 20:39:34 · 556 阅读 · 0 评论 -
Primitive root
高大上的数论,先入门再说。原根的定义可以到wiki上找,上面介绍得很清楚。如果你是个热(bu)爱(dong)祖(ying)国(yu)的人,看这个blog就行了1、51nod 1135奇怪的oj,还是放链接吧求奇素数n最小的原根。从2~n-1枚举x,判断x是否满足x^j mod n != 1 j=2,3,4,...,phi(n)-1暴力判断会T,需要跟快的算法。原创 2015-05-14 19:59:36 · 1460 阅读 · 0 评论 -
Chinese Remainder Theorem
用于求解同余方程组x = ri (mod ai) 1更一般的,我们来考虑如何解决ai不互质的情况我们可以用合并方程组的方法来解决此类问题。x = r1 (mod a1)x = r2 (mod a2)我们可以将上述方程写成另一种形式x = k1*a1+r1x = k2*a2+r2我们可以得到k1*a1+r1=k2*a2+r2即k1*a1 = r2-原创 2015-05-29 19:58:49 · 983 阅读 · 0 评论 -
KD-Tree入门
经过这几天研究kd-tree,我可以说kd-tree就是按照基本的思路随便写就可以了吗?以二维平面为例,在二维平面上有若干点,我们如何建立kd-tree?第一层以x坐标的中位数将所有点分为两部分,分别放到左右子树上,第二层以y坐标的为中位数再将当前的集合平分,第三层依然以x坐标……如此递归下去。以查询最近点为例,我们在当前节点上找到查询点应被分在哪一个子树上,优点遍历这个子树,如果在此原创 2015-06-20 07:39:09 · 2581 阅读 · 1 评论 -
平衡树练习——被虐记~~
最近做的一份jsoi2011冬令营的卷子,瞬间被虐暴了。。。。。其中以两道平衡树最为奇葩。蒟蒻今天终于写完了两道平衡树——调了好长好长时间,高级数据结构能力太渣了。--------------------------------------------华丽的分割线--------------------------------------------(最近搞了个强大原创 2015-01-15 21:42:14 · 847 阅读 · 0 评论 -
后缀自动机初步
想学这个算法很久了省选结束后终于下定决心好好学学!先推荐两篇文章http://hi.baidu.com/myidea/item/142c5cd45901a51820e25039?qq-pf-to=pcqq.grouphttp://blog.youkuaiyun.com/huyuncong/article/details/7583214学好后缀自动机的关键就是理解其转移边与父亲变得不原创 2015-04-23 20:01:13 · 1721 阅读 · 0 评论 -
莫队算法小结
终于把糖果公园a掉了,写点小结冷静一下(由于博主现在思维混乱,所以请用混乱的思维来阅读本篇文章)1、小z的袜子这算是鼻祖了吧。把序列分成sqrt(n)块,把询问先按左端点所在的块顺序,再按右端点升序排序,可以证名这样暴力移动左右端点最多达到O(n^1.5)的复杂度简单吧code是很就以前写的了,很丑勿喷#include #include #include #inc原创 2015-06-11 22:17:13 · 694 阅读 · 0 评论 -
SPOJ GSS2
求最大子段和,但是相同的数只算一次。在现很难完成,可以考虑离线。离线方法很trick把原数组按读入顺序加入,用s[i]维护s[i]到当前加入的和(不重复计算)如何维护这个和?很简单,只要用线段树把pre[i]+1~i的s都加上a[i]即可把询问按照右端点排序,对于询问[l,r],我们只要在加入r之后查找s[l~r]曾今的最大值即可这个怎么用线段树维护?可持久化?似乎会爆空间原创 2015-06-13 21:33:28 · 793 阅读 · 0 评论 -
省选模版复习——LCT
bzoj2157 LCT裸题#include #include #include using namespace std;const int INF=1e9;const int Maxn=40005;int son[Maxn][2],sum[Maxn],minx[Maxn],maxx[Maxn];int inv[Maxn],rev[Maxn],w[Maxn],fa[Maxn]原创 2015-04-15 08:22:42 · 564 阅读 · 0 评论 -
LCT练习
————LCT建议研究杨哲大神的《QTREE解法的一些研究》,自觉讲得十分详细。LCT的核心算法也就是几个过程:access.makeroot,link,cut……搞出这几个过程LCT也不是啥难写的东西啦。在最近做了几道入门题,奉上。spoj qtree3树上支持修改颜色(黑白),查询路径上第一个黑点编号。直接LCT搞吧,记录路径上黑点的数量。修改时把x店转原创 2015-03-25 13:10:35 · 877 阅读 · 0 评论 -
整体二分入门
骗分神器!推荐论文:xhr2013集训队论文能够整体二分的题目必须满足一下几点(摘自xhr论文)1、询问答案具有可二分性2、修改对答案的判定相互独立,互不影响3、如果修改对询问有贡献,则贡献是确定的,且与判定标准为无关4、贡献满足结合律、交换律,具有可加性5、题目允许离线(好像现在大部分题目强制在线)另外一个很重要的一点就是注意些整体二分时必须是的当前步骤的复杂度只原创 2015-04-24 09:40:40 · 2246 阅读 · 0 评论 -
省选模版复习——主席树
bzoj3653 谈笑风生dfs序,主席树水过去吧#include #include #include #include using namespace std;#define pb push_backtypedef long long LL;const int Maxn=300005;LL sum[Maxn*20],ans;int stk[Maxn],dep[Maxn原创 2015-04-16 08:50:23 · 525 阅读 · 0 评论 -
省选模版复习——后缀数组
bzoj3238 后缀数组水#include #include #include using namespace std;const int Maxn=500005;typedef long long LL;LL Ans;char S[Maxn];int H[Maxn],Rank[Maxn],q[Maxn],pre[Maxn],nxt[Maxn];int l,r,N,i,原创 2015-04-15 08:20:52 · 522 阅读 · 0 评论 -
欧拉函数&莫比乌斯反演
近几天做了几道有关反演的问题,再次集合一下吧。1、[BZOJ 2301]HAOI2011 Problem b2、[BZOJ 2440]中山市选2011 完全平方数3、gcd4、[BZOJ 2186]SDOI2008 莎拉公主的困惑5、[BZOJ 3529]SDOI2014 数表(蒟蒻自认为反演一类的的题目重要的就是记住两个重要的公式:1、sigma(mu[i] ,原创 2015-02-01 21:55:47 · 2061 阅读 · 0 评论 -
FFT
借用UOJ的多项式乘法丢模版,走人#include #include #include using namespace std;const int Maxn=200005;struct S_A{ int x,num; bool operator <(const S_A &a)const { return x<a.x; }} Sa[Maxn];char S[Max原创 2015-02-26 14:43:23 · 509 阅读 · 0 评论 -
主席树初探
笔者近几天研究了一下早已久仰的主席树!(据说可是主席发明的树哦)看着讲义和网上的博客yy了好久,最后还是看程序看明白的,衰。。。。。。极力推荐CLJ的《可持久化数据结构研究》,写的非常好,虽然蒟蒻一开始没看懂。。。。--------------------------------------------------华丽的分割线--------------------------原创 2014-12-31 23:37:44 · 1320 阅读 · 0 评论 -
codeforces286E Ladies' Shop
题目大意:给你n个互不相同的数,保证其不大于m。要求你再确定一串数p,满足:1、p个数可以选出一些集合(相同的数可重复选),其和可以组成所有给定的n个数。2、从p中选择任意数集(相同的数可重复选),若其和不大于m,那么这个和必在给定的n个数中。3、在满足1和2的情况下p最小。n,m(若不是tag上友情提示是fft,蒟蒻怎么也不会想到正解)不难发现p数一定是n中的数(废话),那么原创 2015-02-28 09:15:32 · 1457 阅读 · 0 评论 -
[BZOJ 3295] Cqoi2011 动态逆序对
最先的想法就是一开始把整个数列建成主席树,在树上搞搞搞搞(你懂的)。。。。想玩就去写,然后发现——MLE再仔细看题,发现“N100000 M,询问量较小——原来是要求逆着用询问建树,反过来求。。。。给跪。。。。。具体来说就是最开始有树状数组记下这个数左边有几个数比他大lef,右边有几个数比他小rig。删除数的时候,查询出左边比他大的数和右边比他小的数之前共被删了tmp个,每次减原创 2015-02-26 20:47:34 · 845 阅读 · 0 评论 -
两个串-----FFT妙用!
题面描述:S、T两个串,求出T在S中出现了几次。其中T中有'?'可以匹配任意字符。S长度n不超过10^5,T长度m不超过S长度。乍一看因该是个关于字符串处理的题目,然后我就杯具了。。。。果断滚粗去看题解,这居然是到FFT!先把T字符串翻转,定义 c[j+m-1] = sigma( (a[j+i]-b[m-1-i])^2 * a[j+i] * b[m-1-i] )(0原创 2015-02-26 20:21:17 · 671 阅读 · 0 评论 -
POJ1811 Prime Test
Miller_Rabin+Pollard_rho算导上都有,贴模板啦#include #include #include using namespace std;typedef long long LL;const int PRIME[9]={2,3,5,7,11,13,17,19,23};LL n,minx;LL mult(LL a,LL b,LL Mod){ LL原创 2015-04-06 17:10:03 · 482 阅读 · 0 评论 -
hdu 4344 Mark the Rope
依然是pollard_rho和Miller_Rabin的模版。。。#include #include #include using namespace std;const int PRIME[9]={2,3,5,7,11,13,17,19,23};typedef long long LL;LL ans1,ans2,tmp,n,dig[200];int Case,cnt;LL原创 2015-04-06 21:09:30 · 586 阅读 · 0 评论 -
codeforces17E Palisection
求母串中互相交的回文串对数。回文树练习题。求相交的不好求,但是我们很容易求出不相交的(精华所在!要学会逆向思维!)用回文树求出在此处开头和结尾的回文串非别为多少,直接搞就可以了。#include #include #include using namespace std;typedef long long LL;const int Mod=51123987;con原创 2015-04-13 11:09:27 · 853 阅读 · 0 评论 -
省选模版复习——FFT
hdu1402 大整数乘法, 裸FFT#include #include #include #include using namespace std;const int Maxn=200005;const double PI=acos(-1);char S[Maxn],T[Maxn];int ans[Maxn],n,m,i,N;struct CP{ double x,原创 2015-04-15 08:24:20 · 602 阅读 · 0 评论 -
[bzoj 2653] middle
陈老师的神题,先拜一下求中位数用二分的方法很容易想到。可以想到我们把二分到数x后,把小于x的定义为-1,大于等于x的定义为1,只要求出一个子序列和大于等于0就说明中位数大于等于x(题目中的n/2是向上取整的)然而之后我并不知道怎么做一般我们建立主席树都是按照数组下标顺序来建的,这题比较奇葩。假设我们只需要查询中位数为x的时候,最大的子序列和是否大于等于0,会做吧——直接弄出原创 2015-06-13 07:14:20 · 750 阅读 · 0 评论