1046.png
分析
一开始拿到这道题就准备使用暴力法去解题,后来发现超时了一个点,发现每次遍历都会重复计算,所以可以定义一个数组,0点到n点的距离存储下来,求n到m点(n<m)的距离是用dis[m]-dis[n]即可!
AC代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int dis[100010];
int sum=0;
for(int i=1;i<=n;i++){
int x;cin>>x;
sum+=x;
dis[i]=sum;
}
int m;cin>>m;
for(int i=0;i<m;i++){
int a,b;
cin>>a>>b;
if(a>b){
int temp=a;a=b;b=temp;
}
int x1=dis[b-1]-dis[a-1];
if(x1<sum-x1){
cout<<x1<<endl;
}else{
cout<<sum-x1<<endl;
}
}
}