问题描述
试题编号: | 202109-1 |
试题名称: | 数组推导 |
时间限制: | 1.0s |
内存限制: | 512.0MB |
问题描述: | 题目描述A1,A2,⋯,An 是一个由 n 个自然数(即非负整数)组成的数组。在此基础上,我们用数组 B1⋯Bn 表示 A 的前缀最大值。 如上所示,Bi 定义为数组 A 中前 i 个数的最大值。 现已知数组 B,我们想要根据 B 的值来反推数组 A。 输入格式从标准输入读入数据。 输入的第一行包含一个正整数 n。 输入的第二行包含 n 个用空格分隔的自然数 B1,B2,⋯,Bn。 输出格式输出到标准输出。 输出共两行。 第一行输出一个整数,表示 sum 的最大值。 第二行输出一个整数,表示 sum 的最小值。 样例1输入 Data 样例1输出 Data 样例1解释数组 A 的可能取值包括但不限于以下三种情况。 情况一:A=[0,0,5,5,10,10] 情况二:A=[0,0,5,3,10,4] 情况三:A=[0,0,5,0,10,0] 其中第一种情况 sum=30 为最大值,第三种情况 sum=15 为最小值。 样例2输入 Data 样例2输出 Data 样例2解释A=[10,20,30,40,50,60,75] 是唯一可能的取值,所以 sum 的最大、最小值均为 285。 子任务50% 的测试数据满足数组 B 单调递增,即 0<B1<B2<⋯<Bn<105; 全部的测试数据满足 n≤100 且数组 B 单调不降,即 0≤B1≤B2≤⋯≤Bn≤105。 |
#include<bits/stdc++.h>
using namespace std;
int main() {
int n,x;
vector<int>num1;
set<int>num2;
cin >> n;
while (n--)
{
cin >> x;
num1.push_back(x);
num2.insert(x);
}
cout << accumulate(num1.begin(), num1.end(),0)<<endl;
cout << accumulate(num2.begin(), num2.end(),0)<<endl;
return 0;
}