码迷,mamicode.com
首页 > 编程语言 > 详细

LG-P2804 神秘数字/LG-P1196 火柴排队 归并排序, 逆序对

时间:2017-12-03 19:00:43      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:strong   数字   ref   整数   nlogn   org   一个   class   输入格式   

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)

LG-P2804 神秘数字/LG-P1196 火柴排队 归并排序, 逆序对

标签:strong   数字   ref   整数   nlogn   org   一个   class   输入格式   

原文地址:http://www.cnblogs.com/OIerPrime/p/7966649.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!