C/C++
用Dis[]数组来保存每点间的距离,数组中保存的距离是的距离+[(n+1)-n]的距离。最后一点的[(n+1)-n]距离数值在Adis中已存在,在Dis[]中多余。
#include<stdio.h>
int main()
{
int A[100001],Dis[100000];
int count=0,Adis=0;
scanf("%d",&count);
for(int i=1; i<=count; i++)
{
scanf("%d",&A[i]);
Adis += A[i];
if(i!=count)
Dis[i] = Adis;
}
int time=0,front=0,later=0,temp=0,gap=0,Mdis=0;
scanf("%d",&time);
for(int i=0; i<time; i++)
{
scanf("%d%d",&front,&later);
if(front<later)
{
temp = front;
front = later;
later = temp;
}
gap = Dis[front-1] - Dis[later-1];
if(gap < Adis-gap)
Mdis = gap;
else
Mdis = Adis-gap;
printf("%d\n",Mdis);
}
return 0;
}