不是顺时针就是逆时针的顺序,所以设定一个记录从节点1到各节点的长度的数组。任意两点直接相减,然后和用总和减去顺时针的距离就得到逆时针方向的距离。
const int N=10001;
int dis[N],A[N];
int main(){
int sum=0,query,n,left,right;
cin>>n;
for(int i=1;i<=n;i++){
cin>>A[i];
sum+=A[i];
dis[i]=sum;
}
cin>>query;
for(int i=1;i<=query;i++){
cin>>left>>right;
if(left>right)
{
int temp=right;
right=left;
left=temp;
}
int temp=dis[right-1]-dis[left-1];
cout << (temp<sum-temp?temp:sum-temp)<<endl;
}
return 0;
}