HDU5806 NanoApe Loves Sequence Ⅱ(尺取法\two pointers)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5806
Time Limit:2000MS Memory Limit:131072KB Description NanoApe, the Retired Dog, has returned back to prepare for for the National Higher Education Entrance Examination!
In math class, NanoApe picked up sequences once again. He wrote down a sequence with n numbers and a number m on the paper.
Now he wants to know the number of continous subsequences of the sequence in such a manner that the k -th largest number in the subsequence is no less than m.
Note : The length of the subsequence must be no less than k .
Input The first line of the input contains an integer T, denoting the number of test cases.
In each test case, the first line of the input contains three integers n,m,k .
The second line of the input contains n integers A1,A2,...,An, denoting the elements of the sequence.
1≤T≤10, 2≤n≤200000, 1≤k≤n/2, 1≤m,Ai≤109
Output For each test case, print a line with one integer, denoting the answer.
Sample Input 1 7 4 2 4 2 7 7 6 5 1
Sample Output 18
给你n,m,k,并给你一个长度为n的数列。让你求他们的最大连续子序列个数,要求连续子序列要满足数列中第k大的数大于等于m。
题目数据范围较大,使用暴力枚举一定会TLE。 使用尺取法(two pointers)来做即可,核心思想是记录前缀和。 其次,对于 a1a2a3a4…an ,每次完成当前枚举的区间之后,只需要++右端点的值,左端点不需要重置回去。(因为比如当前区间左端点为 a4 那么 [a4,ai] 满足条件时一定可以保证 [a1,ai] 也满足。详细见代码
后注:如果数据不是很强,可以用树状数组水过。但是写了一发树状数组T了,看来数据的确非常强。