时间限制 : 2 秒
内存限制 : 128 MB
周周有 �n 个数,他提出了 �q 个问题,每个问题是说,询问前 �x 个数的极差(最大值减最小值)。你能帮助他解决这 �q 个问题吗?
输入
第一行两个整数 �,�(1≤�,�≤105)n,q(1≤n,q≤105)
第二行 �n 个整数 ��(1≤��≤109)ai(1≤ai≤109) 表示周周的 �n 个数
第三行 �q 个整数 ��(1≤��≤�)xi(1≤xi≤n) ,表示每一次询问
输出
输出一行,包含 �q 个整数,表示每一次询问的答案
数据范围 对于 60%60% 的数据, 1≤�,�≤1031≤n,q≤103
对于 100%100% 的数据,1≤�,�≤1051≤n,q≤105
样例
输入
5 5 3 2 4 5 1 1 2 3 4 5
输出
0 1 2 3 4
提示
统计这个数组的前缀最小值和前缀最大值,对于每次询问直接输出相应前缀最大值和前缀最小值的差即可。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,q,w;
int a[N],ma[N],mi[N];
int main()
{
scanf("%d %d",&n,&q);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(i==1)
{
ma[i]=mi[i]=a[i];
}
else{
ma[i]=max(ma[i-1],a[i]);
mi[i]=min(mi[i-1],a[i]);
}
}
for(int i=1;i<=q;i++)
{
scanf("%d",&w);
printf("%d ",ma[w]-mi[w]);
}
return 0;
}