原题地址终于做到线段树的题了,因为建树、更新、查询都是递归操作,所以其实挺好写的。用数组存的树,记得MAX_NODE开成两倍叶节点数大小,否则RE啊。。不要问我是怎么知道的。代码: 1 #include 2 #include 3 using namespace std; 4 5 #d...
分类:
其他好文 时间:
2015-04-01 21:40:48
阅读次数:
136
这题可以把问题转化为,对于一个位置,限制的位置必然是,递增时候,小于他本身,或者递减时候,大于他本身的位置,然后在这个区间中,寻找最大(小)值的位置,这样利用线段树维护即可,对于一个限制位置,可以先把数字离散化掉,然后用权值做节点很容易就处理出来了,然后第二个问题就是普通的rmq问题
代码:
#include
#include
#include
using namespace std;
...
分类:
其他好文 时间:
2015-04-01 15:24:52
阅读次数:
157
问题可以转化成,对于二进制的每一位,每位最多用k次,那么能加出n的情况数,
这样其实就一个背包问题,利用记忆化搜索,减少需要的状态数
代码:
#include
#include
#include
using namespace std;
const int MOD = 1000000009;
int w[20];
int t, n, k;
int dp[20][10005];
i...
分类:
其他好文 时间:
2015-04-01 15:23:33
阅读次数:
285
这题先预处理数组有多少个置换,这样的话,每个置换最少要被选到一次,最多就是置换长度的次数,利用这些置换进行DP,和背包一样的,每个置换当成一个物品,选择的概率很容易算出,利用这点进行状态转移即可算出种数,最后在除上总情况数就可以算出概率
代码:
#include
#include
#include
#include
using namespace std;
const int N =...
分类:
其他好文 时间:
2015-04-01 15:21:59
阅读次数:
120
原题地址模拟题,naive算法即可过,想着顺便练习一下ST吧,结果还超时了。。。看来ST真不适合处理动态修改的问题,连naive算法的效率都不如。超时的ST代码: 1 #include 2 3 using namespace std; 4 5 #define MAX_NODE 10008 6 ...
分类:
其他好文 时间:
2015-04-01 15:16:09
阅读次数:
166
原题地址根据提示用Spase Table做将Tree先展成List,因为数组长度等于边数的2倍,树中边数等于节点数-1,所以List数组只要开2倍节点数大小即可WA了几次,原来是查询的时候出现左边界大于右边界的情况,所以这种情况要颠倒一下代码: 1 #include 2 #include 3 #.....
分类:
其他好文 时间:
2015-04-01 11:07:58
阅读次数:
127
原题地址Spare Table练习记得用scanf和printf输入输出,否则会TLE代码: 1 #include 2 #include 3 #include 4 5 using namespace std; 6 7 #define MAX_SIZE 1000010 8 9 int N,...
分类:
编程语言 时间:
2015-04-01 10:49:22
阅读次数:
156
原题地址按照提示里的递推公式,不知道改怎么写,因为如何枚举状态s不是很明显索性修改了一下递推公式,这样带来了一些冗余计算,不过还好没有超时位运算的状态压缩太操蛋了,很容易出错。。。又是数组没开够导致诡异现象(明明某个值是1,莫名其妙就变成0了),害我debug一整天!fuck代码: 1 #inclu...
分类:
其他好文 时间:
2015-03-31 17:34:29
阅读次数:
151
原题地址看了这篇博文,总算是把Trie图弄明白了Runtime Error了无数次,一直不知道为什么,于是写了个脚本生成了一组大数据,发现果然段错误了。调试了一下午,总算闹明白了,为什么呢?1. 空间超大的变量不要放在函数里,会爆栈,应该弄成全局变量或者是从堆上动态分配。2. 看清题目的数据范围,一...
分类:
其他好文 时间:
2015-03-30 23:02:53
阅读次数:
265