摘要: 题意:给定一个N长的序列,有n个人编号1-n , 第i个人和第i-1,i+1 互相为朋友,询问多次,问你询问的区间里面有多少堆(可以互相认识)朋友:解题思路:开始一想有点像并查集的味道,不过想到LSS(我的队友,图论大牛)博客里面说的是线段树加离线(http://blog.csdn.net/u010126535),就按这个方面去想了,这题的主要思想是对询问的左端点按从大到小排序,然后对序列从后往前扫,对于A[I] 如果 A[I]- 1 或A[I] +1 出现过的话,更新其(它的两个邻居位置)线段树节点(+1);然后询问的答案就是这个区间长度-区间和,(这里主要是因为总是有一个连续序列排在最后面 阅读全文
posted @ 2013-08-08 21:27 dark_dream 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个序列,动态的询问你这个序列的某个区间两两最大的最大公约数:解题思路:一个区间的最大GCD 就是一个在这个区间出现两次的最大约数。。。。这个题的解题思路是,从后往前扫描,对于A[I]的约数,如果后面出现过,则更新后面那个数的线段树节点。离线的原因主要是因为我们目前的状态,只能解决当前的问题,而且后面的询问,又依赖于现在的状态,所以就要对询问的左区间进行从大到小的排序,然后扫描,如果 i 等于一个询问的左边界,则更新询问。解题代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include... 阅读全文
posted @ 2013-08-08 15:05 dark_dream 阅读(317) 评论(0) 推荐(0) 编辑