【2023米哈游-2】数组相关

米哈游拿到了一个数组a, 她用这个数组构造了一个新数组b, 其中a_i代表b数组中有a_i个i.

例如, a = [2,3,1], 则b = [1,1,2,2,2,3].解释: 2表示1有两个, 3表示2有3个, 1表示3有1个.

现给定a, 你需要求出b数组中所有b数组中连续子数组的极差之和. 由于答案过大, 对10^9+7取模.(极差指最大值减最小值)

输入描述:

第一行输入一个正整数n, 表示a数组的个数.

第二行输入n个正整数a_i, 表示a数组的元素.

示例1:

input:
2
2 1

output:
2

解题思路

一次遍历, 直接将最大和-最小和;

代码实现

import java.util.*;

public class test {
    final static long mod = (long)Math.pow(10,9)+7;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        long ans = 0;
        int m;
        long sum = 0, num = 0;

        for (int i = 1; i <= n; i++) {
            m = sc.nextInt();
            if (i != 1) {
                ans += ((num*i-sum+mod)%mod)*m%mod;
                ans %= mod;
            }
            sum = (sum + (long) m *i) % mod;
            num = (num + m) % mod;
        }
        System.out.println(ans);
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值