2012年5月30日
摘要: SPOJ_2713 查询区间和很容易用线段树实现,而开方操作乍一看是没法用下传lazy标记的办法实现的,但仔细想一下,实际上每个数最多被开方的次数也是很有限的,只要最后开成1或者0,那么之后都不会再变了。 因此我们可以用一个finish标记表示当前区间内是否还有数在开方后发生变化,如果有的话finish为0,否则为1,每次开方都沿finish为0的区间更新到底,由于被开方次数有限,所以整体的复杂度还是可以承受的。#include<stdio.h>#include<string.h>#include<math.h>#define MAXD 100010long 阅读全文
posted @ 2012-05-30 15:17 Staginner 阅读(135) 评论(0) 推荐(0) 编辑
摘要: SPOJ_1716 这个题目和SPOJ_1043的GSS1是类似的,只不过增加了单点修改的功能。用线段树实现相应的功能即可。#include<stdio.h>#include<string.h>#define MAXD 50010#define INF 0x3f3f3f3f3f3f3f3fllint N, M, a[MAXD];long long lc[4 * MAXD], rc[4 * MAXD], mc[4 * MAXD], sum[4 * MAXD];long long Max(long long x, long long y){ return x > y 阅读全文
posted @ 2012-05-30 13:50 Staginner 阅读(248) 评论(0) 推荐(0) 编辑
摘要: HNU_12309 除去长度为L的木板,这个题目就可以看成4种物品装入背包,问最少几个背包能够装下。 在划分阶段的时候如果按一个背包一个背包装的话,这样决策的选择就会变得很多,而如果按一个物品一个物品去装的话,那么决策就很少了。 在记录状态的时候必然要纪律剩余物品的情况,于是不妨开一个四维数组f[i][j][k][l],表示剩余的物品数分别为i、j、k、l时最少需要的背包数,但只记录这些信息还是不够的,我们还需要当前在装的这个背包还剩余多少容量,于是可以再开一个四维数组g[i][j][k][l],表示在背包数量最少的前提下,当前背包剩余的最大容量是多少。 在决策的时候,只要分别对4种物... 阅读全文
posted @ 2012-05-30 12:05 Staginner 阅读(158) 评论(0) 推荐(0) 编辑