Codeforces 549F

coc youyl posted @ 2015年6月16日 21:32 in codeforces , 579 阅读

题目链接:http://codeforces.com/problemset/problem/549/F

题目分类:分治

程序链接:http://codeforces.com/contest/549/submission/11590844

题意:

给出一个长度为n的序列,求满足以下条件的子串的个数:去除这个子串中的最大数之后,这个子串的数字和为m的倍数。

题解:

分治,将待处理的区间分成左右等长的2份。

答案共有三种情况:最大的在左边,最大的在右边,被2份中的一份完全包括。

第三种情况分治处理,前两种情况对称只需要考虑一种。

如果最大的在左边,枚举这个子串的左端点,根据定义最大值在左端点到中间这段区域内,所以向右延伸尽量多的数字但是需要满足右边最大值小于左边最大值,可以使用hash来合并两侧结果。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter