10 2011 档案

摘要:鉴于noip将近,我就把超纲的工作缩了一点水,本来要做一批题的,现在就只做了一个维护序列了:这道题目恶心啊,不理一下思路怕写不出来:由于是单旋splay,为了使操作方便,加了一个0节点和一个n + 1节点,由于0节点的特殊性,就把整个序列向右平移一个。0:初始化 一开始读入初始数列时,要把它们加入树,就先把它们预处理成一颗平衡树就好,于是从这里开始有了一个函数build(pos, l, r)表示把l到r这段建树,以pos为当前树的根,递归处理即可,最后递归回来不要忘记更新标记。1:插入 同样把读进来的数列先预处理成一颗平衡树,然后再把l这个节点splay到根,把l+1节点splay到l右边,此 阅读全文
posted @ 2011-10-31 22:04 Neroysq 阅读(311) 评论(0) 推荐(0)
摘要:最近预计做一下各种平衡树的题,这是第一部分,就是一类简单的各种操作,由于实在是太简单了,各种数据结构都可以胜任,我就用treap和sbt分别做了一遍平衡树的三大水题,于是这两种数据结构就比较熟练了。 treap就是普通的二叉排序树多满足了一个堆的性质,相当好写,贴一贴三道题的代码:1.hnoi2002 turnover(无敌大水题)#include <stdio.h>#include <stdlib.h>#include <time.h>const int nmax = 32767;int ans, n, tot, root;struct typetreap 阅读全文
posted @ 2011-10-29 11:33 Neroysq 阅读(368) 评论(0) 推荐(0)
摘要:有一类问题,它们的大意都是维护一段序列,给出两种操作,一种是对一段区间进行整体修改,一类是对一段区间询问其中元素的极值或者和。这一类问题通常是使用线段树来解的,然而,如果操作比较简单,线段树的实现也会有不同的方法,这里以最简单的一道题poj 3468为例。第一种方法:线段树 + lazy标记我们使用lazy标记维护当前节点的子区间是否有延后更新,我们知道如果对于每一次的区间修改都暴力做的话复杂度是O(n)的,我们想要把它减少到O(logn),于是对于一整段区间都需要修改的情况,我们可以就在这整段区间的代表节点记下这个区间需要改变的值,当我们需要深入这个区间时再将这个信息下放下取,运用这个思想就 阅读全文
posted @ 2011-10-27 22:26 Neroysq 阅读(975) 评论(1) 推荐(0)
摘要:快速傅立叶变换FFT下面的排版比较乱,可以直接下word版的:http://minus.com/dbdrNFtIEL89Eb.docx;原理:利用多项式点值求积的便捷性。对于一个次数界为n的多项式A(x)= 然后我们对于这种多项式有很多表示方法,最常见的就是系数表示法(coefficientrepresentation),也就是我们定义一个向量a = (a0, a1,a2,…, an-1),通过向量a,我们就知道了这个多项式的所有系数,这样对于多项式与多项式就能进行运算了:1.多项式加法:A(x) + B(x) =C(x) 显然,C(x)的系数向量c = (a0+ b0, a1 + ... 阅读全文
posted @ 2011-10-14 21:40 Neroysq 阅读(1774) 评论(1) 推荐(0)
摘要:Pro 有n个盒子围成一个圆圈,我们把这些盒子顺时针从1到n(1 <= N <= 1000)编号。 在这些盒子里面有一些球,球的总数不大于n。 我们现在要进行若干次操作,使得每个盒子里面最多存在一个球。对于一次操作, 我们可以把一个球从它原先所在的盒子移到与它相邻的一个盒子里面。 请你编写一个程序:从输入数据中读取求得总数和每个盒子里球的具体个数,并且计 算出最少的操作数使得满足每个盒子中最多只有一个球Solution我们可以建立一个费用流模型解决这一道题,我们如果把每一个球当作一道流量为1的流, 那么如果我们建立一个汇点表示最终在盒子中的球的数目,那么显然这两个流量是... 阅读全文
posted @ 2011-10-05 18:06 Neroysq 阅读(358) 评论(0) 推荐(0)