纠结了一天的题
//先上题目1136. 山海经
Description
“南山之首曰鹊山。其首曰招摇之山,临于西海之上,多桂,多金玉。有草焉,其状如韭而青华,其名曰祝余,食之不饥……
又东三百里,曰堂庭之山,多δ荆喟自常嗨瘢嗷平稹
又东三百八十里,曰j翼之山,其中多怪兽,水多怪鱼,多白玉,多蝮虫,多怪蛇,多怪木,不可以上。……”
《山海经》是以山为纲,以海为线记载古代的河流、植物、动物及矿产等情况,而且每一条记录路线都不会有重复的山出现。某天,你的地理老师想重游《山海经》中的路线,为了简化问题,老师已经把每座山用一个整数表示他对该山的喜恶程度,他想知道第a座山到第b座山的中间某段路(i,j),使得他感到是最满意的,即(i,j)这条路上所有山的喜恶程度之和是所有(c,d)(a≤c≤d≤b)最大。于是老师便向你请教,你能帮助他吗?值得注意的是,在《山海经》中,第i座山只能到达第i+1座山。
Input
输入第一行是两个数n,m,2≤n≤100000,1≤m≤100000,n表示一共有n座山,m表示老师想查询的数目。
第二行是n个整数,代表n座山的喜恶度,绝对值均小于10000。
以下m行每行有两个数,a,b,1≤a≤b≤n,表示第a座山到第b座山。
Output
一共有m行,每行有三个数i,j,s,表示从第i座山到第j座山总的喜恶度为s。显然,对于每个查询,有a≤i≤j≤b,如果有多组解,则输出i最少的,如果i也相等,则输出j最少的解。
Sample Input
5 3
5 -6 3 -1 4
1 3
1 5
5 5
Sample Output
1 1 5
3 5 6
5 5 4
//我的代码
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n;
int m;
int love[100001];
int i;
int a,b;
int sum=0;
int max;
int x,y;
int num;
int j;
int count1,count2;
scanf("%d%*c%d%*c",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d%*c",&love[i]);
}
while(m--)
{
scanf("%d%*c%d%*c",&a,&b);
max=love[a];
count1=a;
count2=a;
for(i=a;i<=b;i++)
{
while(love[i]<0&&i<b) //程序优化
{
i++;
}
for(j=i;j<=b;j++)
{
while(1)
{
sum=sum+love[j];
if(love[j]>0||j==b) //程序优化
{
break;
}
j++;
}
if(max<sum)
{
max=sum;
count1=i;
count2=j;
}
}
sum=0;
}
printf("%d %d %d\n",count1,count2,max);
}
system("pause");
return 0;
}
在我想到的例子中都通过了,可是机器显示我还是有部分例子不能通过,估计是边界的问题。还有就是这程序超时了,但是我觉得已经优化到极限了吧(菜鸟见识,不要介意)……求救求救……