这道题目开始时以每次查询都去遍历一遍,往两个方向搜索,会超时,即使减掉一些情况。
考虑过用二维数组发现10^5*10^5,编译会报数组太大的错误,这个比较奇怪,在全局变量不是都是在对上分配吗?按理来说可以无限大啊。待考察
// 1046.cpp : 定义控制台应用程序的入口点。
//
//用一维数组来记录二维数组的信息,sum[j]-sum[i]就是sum[i][j]信息
#include "stdafx.h"
#include<stdio.h>
#define MIN(a,b) a<b?a:b
int data[100010];
int sum[100010];
int total;
int main()
{
int n;
int count;
freopen("1046.txt","r",stdin);
while(scanf("%d",&n)!=EOF)
{
total=0;
for(int i=0;i<n;i++)
{
scanf("%d",&data[i]);
total+=data[i];
sum[i]=total;//一维数组记录总和
}
scanf("%d",&count);
int start,end;
for(int j=0;j<count;j++)
{
scanf("%d%d",&start,&end);
int min=start>end?end:start;
int max=start<end?end:start;
int tmp=sum[max-2]-sum[min-1]+data[min-1];
tmp=tmp<0?0-tmp:tmp;
printf("%d
",MIN(total-tmp,tmp));
}
}
return 0;
}