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

Posted OptimusPrime_L

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LG-P2804 神秘数字/LG-P1196 火柴排队 归并排序, 逆序对相关的知识,希望对你有一定的参考价值。

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 火柴排队 归并排序, 逆序对的主要内容,如果未能解决你的问题,请参考以下文章

SZTUOJ 1017.火柴人

[SCOI2013]火柴棍数字(背包)

清北学堂模拟赛d1t2 火柴棒 (stick)

P1149 火柴棒等式

NOIp2013 火柴排队

NOIp2013火柴排队