摘要:
此题和普通的线段树题相比,最大的挑战在于区间太大,如果一开始就建立一个完整的线段树,空间太大。所以,先只建立根节点,每来一组数据,用普通的线段树查找方法沿根节点查找,如果此组数据的子树不存在,则建立子树。最后递归删除线段树。结果为:15308kB80ms如果最后不删除树,时间所减少,空间增大。为:20324kB60ms#include #include struct InTree{ int l,u; InTree *left,*right; int color;//-2表示该区间是混合色或者还未涂色 InTree(int low,int upp){ ... 阅读全文
摘要:
思路:使用线段树,并且采用延迟标记的方法使更新操作的复杂度控制在O(logn)。这里采用数组的方法存储二叉树,可以省下两个指针的空间,但代码变得不是很直观,而且容易犯错。另外此题中数据可能超过32位,故使用long long类型存储(POJ平台不能采用__int64,具体原因参见这里),同时使用%lld输出。另外,直接使用scanf读入一个字符的方法会读入空白字符,这里使用scanf("%1s",c);实现。注意因为%s会在输入字符串的末尾加上终止符'\0',故c至少是一个长度为2的数组。6596kB600ms3338 B#include struct In 阅读全文
摘要:
//为了和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 阅读全文