题目链接:B. Also Try Minecraft
题解
本想找个dp没想到是个水题,数组作差,前缀和
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+10;
ll a[maxn];
ll l[maxn],r[maxn],suml[maxn],sumr[maxn];
int main()
{
int n,m; scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=2;i<=n;i++)
{
l[i]=max(0ll,a[i-1]-a[i]);
suml[i]=l[i]+suml[i-1];
}
for(int i=n-1;i>=1;i--)
{
r[i]=max(0ll,a[i+1]-a[i]);
sumr[i]=r[i]+sumr[i+1];
}
while(m--)
{
ll ans=0;
int s,t; scanf("%d%d",&s,&t);
if(s>=t)
{
printf("%lld\n",sumr[t]-sumr[s]);
}
else
{
printf("%lld\n",suml[t]-suml[s]);
}
}
}