摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3874 比较简单的题,题意也好懂。 先O(n)求每个数左边第一次出现的与他相同的数的位置l[i]。对询问按照y从小大排序,然后按照从左到右的顺序来跟新点,当前点为i,那么删掉l[i],加入点i,然后遇到询问求和。 1 //STATUS:C++_AC_2593MS_10024KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 1... 阅读全文
posted @ 2013-10-31 00:43 zhsl 阅读(277) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3872 题意:有n个龙珠按顺序放在一列,每个龙珠有一个type和一个权值,要求你把这n个龙珠分成k个段,每段的权值是这段中的最大的权值,使得最后的权值之和最小。但是现在有个要求,分的段中,龙珠的type不能和最右边的相等。 容易想到是一个DP:f[i]=Min{f[j]+Min(j,i) | j是满足要求的点}。直接搞的话O(n^2),显然超时了。但是可以发现,这个Min(j,i)是有分段性的,因此我们可以维护一个单调递减的栈,那么只要求栈中的元素就可以了,因为只有这些元素有效。这里还要求最... 阅读全文
posted @ 2013-10-31 00:39 zhsl 阅读(386) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1998 题意:有n个石头,每个石头有个重量,每个时间点你能让一个石头飞起来,但有m个时间点,你会分心,使得已经飞起来的石头会有重量之和大于k的石头掉下来,问你最终使的所有石头飞起来的时间。 维护一个前缀和,然后二分就可以了。 1 //STATUS:C++_AC_93MS_1113KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #incl... 阅读全文
posted @ 2013-10-31 00:22 zhsl 阅读(342) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1997 题意:记录了n个人进出门的时间点,每个人在房子里面待的时间要么小于等于a,要么大于等于b,询问能否对进出门的时间点找到一个合适的匹配。 对于满足的要求建立边即可,然后看是否能找到最大匹配。 1 //STATUS:C++_AC_109MS_4361KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #incl... 阅读全文
posted @ 2013-10-31 00:21 zhsl 阅读(348) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1991 水题。。 1 //STATUS:C++_AC_15MS_333KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #include 19 ... 阅读全文
posted @ 2013-10-31 00:15 zhsl 阅读(251) 评论(0) 推荐(0) 编辑