从中间向两边推进
dp[x-1][y+1]=dp[x][y]+dist[y]-dist[x];
//
#include<stdio.h>
#include<string.h>
int dp[1100][1100];
int dist[1100];
int n;
void init()
{
int i;
memset(dp,-1,sizeof(dp));
for(i=1;i<=n;i++)
{
scanf("%d",&dist[i]);
dp[i][i]=0;
}
for(i=1;i<n;i++)
dp[i][i+1]=dist[i+1]-dist[i];
}
int dfs(int x,int y)
{
if(dp[x][y]!=-1)return dp[x][y];
dfs(x+1,y);//保证每个区间都可以被搜到
dfs(x,y-1);
return dp[x][y]=(dfs(x+1,y-1)+(dist[y]-dist[x]));
}
void solve()
{
dfs(1,n);
}
int main()
{
int x,y,t;
while(scanf("%d",&n)!=EOF)
{
init();
solve();
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&x,&y);
printf("%d\n",dp[x][y]);
}
}
return 0;
}