2022-09-05:作为国王的统治者,你有一支巫师军队听你指挥。
:给你一个下标从 0 开始的整数数组 strength ,
其中 strength[i] 表示第 i 位巫师的力量值。
对于连续的一组巫师(也就是这些巫师的力量值是 strength 的 子数组),
总力量 定义为以下两个值的 乘积 :
巫师中 最弱 的能力值 * 组中所有巫师的个人力量值 之和 。
请你返回 所有 巫师组的 总 力量之和。由于答案可能很大,请将答案对 109 + 7 取余 后返回。
子数组 是一个数组里 非空 连续子序列。

答案2022-09-05:

单调栈。

代码用rust编写。代码如下:

fn main() {
let mut arr = vec![1, 3, 1, 2];
let ans = total_strength(&mut arr);
println!("ans = {}", ans);
} const mod0: i64 = 1000000007; fn total_strength(arr: &mut Vec<i32>) -> i32 {
let n = arr.len() as i32;
let mut pre_sum = arr[0] as i64;
let mut sum_sum: Vec<i64> = vec![];
for _ in 0..n {
sum_sum.push(0);
}
sum_sum[0] = arr[0] as i64;
for i in 1..n {
pre_sum += arr[i as usize] as i64;
sum_sum[i as usize] = (sum_sum[(i - 1) as usize] + pre_sum) % mod0;
}
let mut stack: Vec<i32> = vec![];
for _ in 0..n {
stack.push(0);
}
let mut size: i32 = 0;
let mut ans: i64 = 0;
for i in 0..n {
while size > 0 && arr[stack[(size - 1) as usize] as usize] >= arr[i as usize] {
size -= 1;
let m = stack[size as usize];
let l = if size > 0 {
stack[(size - 1) as usize]
} else {
-1
};
// l(<当前值,且最近,到不了) m(当前数,做为最小值) i(<=当前数,到不了的!)
ans += magic_sum(arr, &mut sum_sum, l, m, i);
ans %= mod0;
}
stack[size as usize] = i;
size += 1;
}
while size > 0 {
size -= 1;
let m = stack[size as usize];
let l = if size > 0 {
stack[(size - 1) as usize]
} else {
-1
};
ans += magic_sum(arr, &mut sum_sum, l, m, n);
ans %= mod0;
}
ans as i32
} fn magic_sum(arr: &mut Vec<i32>, sum_sum: &mut Vec<i64>, l: i32, m: i32, r: i32) -> i64 {
let left = (m as i64 - l as i64)
* (sum_sum[(r - 1) as usize]
- if m - 1 >= 0 {
sum_sum[(m - 1) as usize]
} else {
0
}
+ mod0)
% mod0;
let right = (r as i64 - m as i64)
* (if m - 1 >= 0 {
sum_sum[(m - 1) as usize]
} else {
0
} - if l - 1 >= 0 {
sum_sum[(l - 1) as usize]
} else {
0
} + mod0)
% mod0;
return arr[m as usize] as i64 * ((left - right + mod0) % mod0);
}

执行结果如下:


左神java代码

2022-09-05:作为国王的统治者,你有一支巫师军队听你指挥。 :给你一个下标从 0 开始的整数数组 strength , 其中 strength[i] 表示第 i 位巫师的力量值。 对于连续的一的更多相关文章

  1. Dapr中国社区活动之 分布式运行时开发者日 (2022.09.03)

    自2019年10月首次发布以来,Dapr(Distributed Application Runtime,分布式应用运行时)因其"更稳定"."更可靠".&quo ...

  2. 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数。

    描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数.   输入 第一行为M,表示测试数据组数.接下来M行,每行包含一个测试数据. 输出 ...

  3. 输入一个正整数n,计算出[0,n]这些整数中的二进制数没有连续3个1的数字有多少

    输入一个正整数n,计算出[0,n]这些整数中的二进制数没有连续3个1的数字有多少? 例子:输入数字9,则输出结果位9.因为[0-9]中,只有数字7有连续的三个‘1’出现,别的都没有,所以一共有9个数字 ...

  4. 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,

    转自:http://www.cnblogs.com/ranranblog/p/5845010.html 风口之下,猪都能飞.当今中国股市牛市,真可谓“错过等七年”. 给你一个回顾历史的机会,已知一支股 ...

  5. 128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列

    给定一个未排序的整数数组,找出最长连续序列的长度.例如,给出 [100, 4, 200, 1, 3, 2],这个最长的连续序列是 [1, 2, 3, 4].返回所求长度: 4.要求你的算法复杂度为 O ...

  6. 编写Java程序,中国道教中掌管天宫的最高权力统治者是玉帝(Emperor),我们可以认为玉帝是一个单例模式,在这个场景中,有玉帝和天宫的大臣(Minister)们,大臣每天要上朝参见玉帝,而每一天参

    查看本章节 查看作业目录 需求说明: 中国道教中掌管天宫的最高权力统治者是玉帝(Emperor),我们可以认为玉帝是一个单例模式,在这个场景中,有玉帝和天宫的大臣(Minister)们,大臣每天要上朝 ...

  7. js验证连续两位数字递增或递减和连续三位数字相同

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  8. Lucene 简单手记http://www.cnblogs.com/hoojo/archive/2012/09/05/2671678.html

    什么是全文检索与全文检索系统? 全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查 ...

  9. 2020.09.05【NOIP提高组&普及组】模拟赛C组1总结

    T1:机器翻译 这一道题是一个很简单的队列题目,我们只要每次维护队列元素数量保持在m以内即可 T2:乌龟棋 这一道题我一开始比赛是暴力枚举(万事先暴力),很明显这个肯定会超时(30分)那么考虑动态规划 ...

  10. Linux目录文件详解FHS标准(2013.09.05)

    Linux 目录配置的依据FHS(Filesystem Hierarchy Standard)标准,将目录分成为四种交互作用的形态: 四种形态的具体解释: 可分享的:可以分享给其他系统挂载使用的目录, ...

随机推荐

  1. Android笔记--外部存储空间

    存储文件的操作 外部存储空间 私有存储空间和公共存储空间 外部存储空间分为私有+公有 保存文件到外部存储空间的相关代码操作: 私有空间: 公有空间: 记得增加权限(Android_Manifest.x ...

  2. python安装robotframework的一些常见的错误

    python安装robotframework的一些常见的错误 首先的电脑环境是x86的,然后下载的python版本起初是3.10.1的 在cmd 中出入pip install robotframwor ...

  3. C_C++常用函数汇总

    1 string.h.cstring(C) (1)字符串连接函数 strcat.strncat strcat(char[ ], const char[ ]) strncat(char[ ], cons ...

  4. Redis - 基础数据类型

    简介 根据 官网文档 的解释,可以了解 Redis 基础数据类型的一些基本信息: 对于 Redis 来说,存储的 key 值都是字符串类型,讨论数据类型的时候,指的都是存储的 value 值.这里主要 ...

  5. 全网最详细中英文ChatGPT-GPT-4示例文档-从0到1快速入门计算时间复杂度应用——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)

    目录 Introduce 简介 setting 设置 Prompt 提示 Sample response 回复样本 API request 接口请求 python接口请求示例 node.js接口请求示 ...

  6. Java 泛型与通配符 定义与使用

    一.泛型 定义: 把类型明确的工作推迟到创建对象或调用方法时才明确的类型,简而言之,未明确的数据类型. 类型: 泛型类,泛型方法,方形接口. 格式 泛型类格式:class 类名<E变量>{ ...

  7. Redis 缓存雪崩 |击穿 |穿透 概念及解决方案

    一.雪崩 1.概念  指某一时间段,缓存集中过期失效,无数的请求绕开缓存,直接访问数据库. 2.解决方案 让redis数据永不过期,这种方式最可靠的.最安全的,但占用空间,内存消耗大,并且不能保持数据 ...

  8. vulnhub靶场之WIRELESS: 1

    准备: 攻击机:虚拟机kali.本机win10. 靶机:Wireless: 1,下载地址:https://download.vulnhub.com/wireless/Mystiko-Wireless. ...

  9. cs 保研经验贴 | 综合面试题库

    绝大部分夏令营都需要面试:如果幸运的话,稍微问几个问题就结束了:不幸的话,可能要抓住你做项目.读论文.复现.做 pre 等等. 这篇博客适用于幸运的情况:绝大部分学校的面试题库,都是彼此重合的,并且一 ...

  10. 数据挖掘系统聚类—R实现

    系统聚类法 聚类就是按照某个特定标准把一个数据集分割成不同的类或簇,最后的结果是希望同类之间的差异性尽可能小,不同类之间的差异性尽可能大.不同的类具有能够表达异于其他类的指标,这样针对不同的类,后续就 ...