思想:
代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 3;
typedef long long LL;
int a[N];
void solve(){
int n; cin >> n;
for(int i = 1; i <= n; i ++){
cin >> a[i]; a[i + n] = a[i]; //将数组首尾相连,即进行拼接
}
for(int i = 1; i <= n * 2; i ++) a[i] += a[i - 1]; //构造前缀和
int m; cin >> m;
while(m --){
int l, r; cin >> l >> r;
if(l > r) swap(l, r); //若 l > r,交换,保证 l < r
cout << min(a[r - 1] - a[l - 1], a[l + n - 1] - a[r - 1]) << endl; //a[r - 1] - a[l - 1] 为顺时针
} //a[l + n - 1] - a[r - 1] 为逆时针
}
int main(){
solve();
return 0;
}