试题编号: | 202109-1 |
试题名称: | 数组推导 |
时间限制: | 1.0s |
内存限制: | 512.0MB |
问题描述: | 题目描述𝐴1,𝐴2,⋯,𝐴𝑛 是一个由 𝑛 个自然数(即非负整数)组成的数组。在此基础上,我们用数组 𝐵1⋯𝐵𝑛 表示 𝐴 的前缀最大值。 如上所示,𝐵𝑖 定义为数组 𝐴 中前 𝑖 个数的最大值。 现已知数组 𝐵,我们想要根据 𝐵 的值来反推数组 𝐴。 输入格式从标准输入读入数据。 输入的第一行包含一个正整数 𝑛。 输入的第二行包含 𝑛 个用空格分隔的自然数 𝐵1,𝐵2,⋯,𝐵𝑛。 输出格式输出到标准输出。 输出共两行。 第一行输出一个整数,表示 𝑠𝑢𝑚 的最大值。 第二行输出一个整数,表示 𝑠𝑢𝑚 的最小值。 样例1输入 Data 样例1输出 Data 样例1解释数组 𝐴 的可能取值包括但不限于以下三种情况。 情况一:𝐴=[0,0,5,5,10,10] 情况二:𝐴=[0,0,5,3,10,4] 情况三:𝐴=[0,0,5,0,10,0] 其中第一种情况 𝑠𝑢𝑚=30 为最大值,第三种情况 𝑠𝑢𝑚=15 为最小值。 样例2输入 Data 样例2输出 Data 样例2解释𝐴=[10,20,30,40,50,60,75] 是唯一可能的取值,所以 𝑠𝑢𝑚 的最大、最小值均为 285。 子任务50% 的测试数据满足数组 𝐵 单调递增,即 0<𝐵1<𝐵2<⋯<𝐵𝑛<105; 全部的测试数据满足 𝑛≤100 且数组 𝐵 单调不降,即 0≤𝐵1≤𝐵2≤⋯≤𝐵𝑛≤105。 |
import java.util.Scanner;
public class ty {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int[] brr=new int[n];
for(int i=0;i<n;i++){
brr[i]=in.nextInt();
}
int min=0;
int max=0;
int tempmax=0;
for(int i=0;i<n;i++){
if(i==0){
min+=brr[i];
max+=brr[i];
tempmax=brr[i];
}else{
if(brr[i]==brr[i-1]){
min+=0;
max+=tempmax;
}else{
min+=brr[i];
max+=brr[i];
tempmax=brr[i];
}
}
}
System.out.println(max);
System.out.println(min);
}
}