上一页 1 2 3 4 5 6 7 ··· 25 下一页

bzoj 3207 可持久化线段树

摘要: 首先因为固定询问长度,所以我们可以将整个长度为n的数列hash成长度为n-k+1的数列,每次询问的序列也hash成一个数,然后询问这个数是不是在某个区间中出现过,这样我们可以根据初始数列的权值建立可持久化线段树,对于每个询问先二分判断是否出现在数列中过,然后再判断是否在区间内出现过。也可以离线将... 阅读全文
posted @ 2014-04-18 07:39 BLADEVIL 阅读(743) 评论(0) 推荐(1) 编辑

bzoj 3524 可持久化线段树

摘要: 我们可以先离散化,然后建立权值的可持久化线段树,记录每个数出现的次数,对于区间询问直接判断左右儿子的cnt是不是大于(r-k+1)/2,然后递归到最后一层要是还是大于就有,否则不存在。 反思:挺简单一道题调了一个晚上加一个几节课= =,原因是这道题的空间给的是128MB,那么就会有比较严重的卡... 阅读全文
posted @ 2014-04-17 14:51 BLADEVIL 阅读(780) 评论(0) 推荐(0) 编辑

HDU 4757 可持久化trie树

摘要: 首先如果给定一些数,询问这些数中哪个数^给定的数的值最大的话,我们可以建立一颗trie树,根连接的两条边分别为0,1,表示二进制下第15位,那么我们可以建立一颗trie树,每一条从根到叶子节点的链表示一个2^16以内的数,开始每个节点的cnt都是0,那么每插入一个元素,将表示这个值的链上所有位置... 阅读全文
posted @ 2014-04-16 18:29 BLADEVIL 阅读(1151) 评论(0) 推荐(0) 编辑

bzoj 3197 DP

摘要: 这道题我们可以看成给定两个黑白树,可以修改其中一棵树的颜色,问最少修改多少颜色可以使两棵树同构。 首先我们知道在树的同构中树上最长链中点(如果是偶数的话就是中间两个点)是不变的,我们把这个点叫做树的重心(如果有两个重心bz,by的话我们可以加一个点连接bx,by,将加的这个点看成重心),那么我... 阅读全文
posted @ 2014-04-16 09:58 BLADEVIL 阅读(372) 评论(0) 推荐(0) 编辑

poj 2104 可持久化线段树

摘要: 我们先离散化,然后根据权值建立线段树,假设我们现在有一颗权值线段树,表示在区间1-n中每个数出现了几次,那么我们可以二分的求出来这个区间的k大值,类似sbt的select操作,那么因为点的权值插入是无序的,所以我们并不能对于子区间l,r做上述操作,因为我们无法提出这个区间,那么我们建立可持久化线... 阅读全文
posted @ 2014-04-16 06:59 BLADEVIL 阅读(192) 评论(0) 推荐(0) 编辑

bzoj 1820 DP

摘要: 我们可以表示w[i][j][k]为送完第i个件,且另外两个人的位置分别是j,k的最短路径,那么比较容易得到转移,我们可以手动枚举第i个邮件是哪个位置的人送的,更新该答案。 数组较大,我们可以滚动第一维。/**************************************************************Problem: 1820User: BLADEVILLanguage: C++Result: AcceptedTime:1512 msMemory:2216 kb***************************************************... 阅读全文
posted @ 2014-04-11 13:22 BLADEVIL 阅读(317) 评论(0) 推荐(0) 编辑

bzoj 2786 DP

摘要: 我们可以将=左右的两个数看成一个块,块内无顺序要求,把#include #include using namespace std;char *w[60];int main() {w[1]="1";w[2]="3";w[3]="13";w[4]="75";w[5]="541";w[6]="4683";w[7]="47293";w[8]="545835";w[9]="7087261";w[10]="102247 阅读全文
posted @ 2014-04-11 13:15 BLADEVIL 阅读(200) 评论(0) 推荐(0) 编辑

bzoj 1912 tree_dp

摘要: 这道题我们加一条路可以减少的代价为这条路两端点到lca的路径的长度,相当于一条链,那么如果加了两条链的话,这两条链重复的部分还是要走两遍,反而对答案没有了贡献(其实这个可以由任意两条链都可以看成两条不重叠的链来证明),那么这道题k=2的时候就转化为了求出树上两条链,使得两条链不重叠的长度最大,那么答案就是(n-1)#include #include #define maxn 100010#define maxm 200020#define inf (~0U>>1)using namespace std;int n,k,l;int pre[maxm],other[maxm],last 阅读全文
posted @ 2014-04-08 18:27 BLADEVIL 阅读(242) 评论(0) 推荐(0) 编辑

伪病毒 Rp_test

摘要: 第一个写的对电脑有破坏性的程序= =,然后发现写system的copy的时候不会用字符串替代路径,然后就萎了= =,只能写一个没有自身复制的伪病毒了,坑到了好多同学的电脑,23333.。。。 //By BLADEVIL#include #include #include #include #include #include #include using namespace std;struct rec { int x,y; rec(){ x=y=0; }}cur;int flag;char CurPath[100],GoalPath[100];void R... 阅读全文
posted @ 2014-04-07 19:33 BLADEVIL 阅读(478) 评论(0) 推荐(0) 编辑

bzoj 1179 tarjan+spfa

摘要: 首先我们可以将这个图缩成DAG,那么问题中的路线就可以简化为DAG中的一条链,那么我们直接做一遍spfa就好了。 反思:开始写的bfs,结果bfs的时候没有更新最大值,而是直接赋的值,后来发现不能写bfs,因为每个点可能进队好多次,当让可以改成循环队列什么的bfs,然后我就改成了spfa,伪的spfa,就是判一下这个点是不是更优了,更优才入队。/**************************************************************Problem: 1179User: BLADEVILLanguage: C++Result: AcceptedTime:... 阅读全文
posted @ 2014-04-07 19:30 BLADEVIL 阅读(338) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 25 下一页