【题目描述】
给出一组整数,它的前x个数称为它的前缀,前缀最值差指的是:数组前x个数中最大值和最小值的差,这个问题到也难不倒小明。 但现在有q个问题询问,要求算出每个问题的前缀最值差。这样工作量就太大了。你有什么办法吗?
【输入格式】
第一行有一个正整数N,表示给出的这组正整数的个数。 第二行有N个正整数ai 。 第三行有一个正整数q,表示有q个询问。 第四行有q个正整数xi,分别表示要求前xi个数中最大值和最小值的差。
【输出格式】
输出,每个询问的答案。
#include<bits/stdc++.h>
using namespace std;
int a[1000010], maxx[1000010], minn[1000010],n,m,x;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d", &a[i]);
maxx[1]=a[1];
minn[1]=a[1];
for(int i=2;i<=n;i++){
maxx[i]=max(maxx[i-1], a[i]);
minn[i]=min(minn[i-1], a[i]);
}
scanf("%d",&m);
for(int i=1;i<=m;i++){
scanf("%d",&x);
if(i>1) printf(" ");
printf("%d",maxx[x]-minn[x]);
}
return 0;
}
1439

被折叠的 条评论
为什么被折叠?



