我想问一下我这个c语言程序为什么运行超时!需要怎么样修改呢?

2025-05-08 23:19:28
推荐回答(1个)
回答1:

#include
#include
/*
  Name: 
  Copyright: 
  Author: 
  Date: 28/01/14 21:12
  Description: 
有n个格子,从左到右放成一排,编号为1-n。
共有m次操作,有3种操作类型:
1.修改一个格子的权值,
2.求连续一段格子权值和,
3.求连续一段格子的最大值。
对于每个2、3操作输出你所求出的结果。
输入格式
第一行2个整数n,m。
接下来一行n个整数表示n个格子的初始权值。
接下来m行,每行3个整数p,x,y,p表示操作类型,p=1时表示修改格子x的权值为y,p=2时表示求区间[x,y]内格子权值和,p=3时表示求区间[x,y]内格子最大的权值。
输出格式
有若干行,行数等于p=2或3的操作总数。
每行1个整数,对应了每个p=2或3操作的结果。
样例输入
4 3
1 2 3 4
2 1 3
1 4 3
3 1 4
样例输出
6
3
数据规模与约定
对于20%的数据n <= 100,m <= 200。
对于50%的数据n <= 5000,m <= 5000。
对于100%的数据1 <= n <= 100000,m <= 100000,0 <= 格子权值 <= 10000。
*/

typedef struct m0
{
int p;
int x;
int y;
}h;

int main()
{
int n,m,i,*q=NULL,j,sum;
h *mm=NULL;
printf(" 输入第一组参数:n m \n \
n 表示 有多少个数据 \n \
m 表示接下来m行的输入参数p x y 。\n");
 
scanf("%d %d",&n,&m);
q=(int *)malloc(sizeof(int)*n);//hanson--为初始数据分配单元 
if( q==NULL){
printf("memory allocate error.\n");
}
//加入判断 
mm=(h*)malloc(sizeof(h)*m);//hanson--为m行的输入数据分配单元
//加入判断 
if( mm == NULL){
printf("memory allocate error.\n");
}
 
for(i=0;i printf("输入第 %d 个数:\t", i+1); 
scanf("%d",&q[i]);
}

//debug
for(i=0; i printf("%10d", q[i]);
if( (i+1) % 5 == 0){
printf("\n");
}
}
//debug end

printf("\n命令格式:p x y\n \
p: 1修改数据, x数据是y \n \
   2求 x y之间的和\n \
   3求 x y之间的最大值\n");
    
    printf("\n共有%d条命令\n", m);
 
for(i=0;i printf("输入第 %d 条命令\t", i+1); 
scanf("%d %d %d",&(mm[i].p),&(mm[i].x),&(mm[i].y));
}

for(i=0;i {
sum=0;
switch(mm[i].p)//hanson--命令 
{
case 1:
q[mm[i].x-1]=mm[i].y;
break;
case 2:
//sum清零==在这里清零==而不是上面 
sum  = 0;//hanson 
for(j=mm[i].x-1;j<=mm[i].y-1;j++)
  sum+=q[j];
printf("%d\n",sum);
break;
case 3:
sum=q[mm[i].x-1];

for(j=mm[i].x-1;j<=mm[i].y-1;j++)
if(sum sum=q[j];
printf("%d\n",sum);
break;
}
}

getchar();
getchar();

return 0;
}

1、有几个小问题,帮你修改了,你看下。有注释

2、哪里超时?==调试内容是什么?