P2804-神秘数字
题目描述(简化版)
有 n 个数,求这 n 个数中,有多少个连续的数的平均数大于某个给定的数 M?
注意:这个数可能会很大,请输出这个数对92084931取模的结果。
输入输出格式
输入格式:
共两行。
第一行为两个数 n 和 M。
第二行为 n 个数。
输出格式:
一行一个数,即问题的解对92084931取模的结果
输入输出样例
输入样例#1:
4 3 1 5 4 2
输出样例#1:
5
输入样例#2:
4 4 5 2 7 3
输出样例#2:
6
说明
【样例解释】
①对于这4个数,问题的解有{5},{4},{5,4},{1,5,4},{5,4,2}共5组。
②对于这4个数,问题的解有{5},{7},{2,7},{7,3},{5,2,7},{5,2,7,3}共6组。
【数据规模】
对于10%的数据,1<n≤10.
对于30%的数据,1<n≤1000.
对于50%的数据,1<n≤30000.
对于100%的数据,1<n≤200000,1<M≤3000,每个数均为正整数且不大于5000.
分析
把数列中的 n 个数字都减去 m。那么某一段的和大于0就是满足要求的一段。
于是问题就转化为:求当前数列中有多少个区间的和大于0。
很容易求出数列的前缀和,放在数组 p 中。
如果第 i 个数到第 j 个数满足要求(假定 i<j),很容易想到 p[j]-p[i-1]>0。
也就是说:p[j]>p[i-1]
问题转化为:求 p[j] 之前有多少个 p[i]>p[j],把相对于每一个p[j]的答案个数相加就是 ans
也就是求前缀和数列p的逆序对
期望复杂度O(nlogn)
时间: 2024-11-09 01:45:19