摘要: 关于SIGSEGV错误及处理方法今天编程遇到了SIGSEGV错误,比较困惑,所以找了些资料,总结一下: (1)官方说法是: SIGSEGV --- Segment Fault. The possible cases of your encountering this error are: 1.buffer overflow --- usually caused by a pointer reference out of range. 2.stack overflow --- please keep in mind that the default stack size is 8192... 阅读全文
posted @ 2012-10-19 22:38 moonswap 阅读(845) 评论(0) 推荐(0) 编辑
摘要: 标准解法是用的离散化。此题的特殊性在于普通离散化后,两个相邻的值之间的区间也可能是有效的区间。例如:有三张海报[1, 4] [5, 6][1, 6],离散化后1->1, 2->4, 3->5, 4->6。他们就会覆盖[1, 6]这张海报。另外三张海报[1, 3] [5, 6][1, 6],离散化后1->1, 2->3, 3->5, 4->6。他们不会覆盖[1, 6]这张海报。而此时两组数据的前两张海报都会变成[1, 2] [3, 4] 两个区间,都覆盖了[1,4]区间。解决方案是如果发现两个离散值之间的距离大于1,就在两个值之间插入一个数字。例如 阅读全文
posted @ 2012-10-19 22:31 moonswap 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 此题和普通的线段树题相比,最大的挑战在于区间太大,如果一开始就建立一个完整的线段树,空间太大。所以,先只建立根节点,每来一组数据,用普通的线段树查找方法沿根节点查找,如果此组数据的子树不存在,则建立子树。最后递归删除线段树。结果为:15308kB80ms如果最后不删除树,时间所减少,空间增大。为:20324kB60ms#include #include struct InTree{ int l,u; InTree *left,*right; int color;//-2表示该区间是混合色或者还未涂色 InTree(int low,int upp){ ... 阅读全文
posted @ 2012-10-19 22:15 moonswap 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 思路:使用线段树,并且采用延迟标记的方法使更新操作的复杂度控制在O(logn)。这里采用数组的方法存储二叉树,可以省下两个指针的空间,但代码变得不是很直观,而且容易犯错。另外此题中数据可能超过32位,故使用long long类型存储(POJ平台不能采用__int64,具体原因参见这里),同时使用%lld输出。另外,直接使用scanf读入一个字符的方法会读入空白字符,这里使用scanf("%1s",c);实现。注意因为%s会在输入字符串的末尾加上终止符'\0',故c至少是一个长度为2的数组。6596kB600ms3338 B#include struct In 阅读全文
posted @ 2012-10-19 00:59 moonswap 阅读(163) 评论(0) 推荐(0) 编辑
摘要: //为了和DSP兼容,TSint64和TUint64设置成TSint40和TUint40一样的数//结果VC中还是认为是32位的,显然不合适//typedefsignedlongintTSint64;//typedefunsignedlongintTUint64;//ANSIC中规定longlong才能表示64位//参见:http://msdn.microsoft.com/en-us/library/s3f49ktz.aspx//可惜VC++6.0不认识longlong,会报errorC2632:'long'followedby'long'isillegalty 阅读全文
posted @ 2012-10-19 00:30 moonswap 阅读(451) 评论(0) 推荐(0) 编辑