#include<stdio.h>
int str1[20005];
int str2[20005];
int x1[4];
int main(){
int t;/*t数组*/
int n;/*n堆糖*/
int m;/*m次操作*/
int d;
int c=0;
int b=0;
int i,r,x,q;
int q1=0;
int a=0;
int n1=1;
int n2=0;
scanf("%d",&t);/*循环次数*/
while(t != 0){
scanf("%d",&n);
while(q<n && scanf("%d",&d) != EOF){
str1[q++]=d;
}/*输入带空格的数*/
q=1;
str2[0]=str1[0];
while(q<n){
str2[q]=str1[q]-str1[q1];
q++;
q1++;
}
q=0;
scanf("%d",&m);
while(m != 0){
while(q<3 && scanf("%d",&d) != EOF){
x1[q++]=d;
}
q=0;
i=x1[0]-1;
r=x1[1];
x=x1[2];
str2[i]=str2[i]+x;
str2[r]=str2[r]-x;
m--;
}
str1[0]=str2[0];
while(n1<=n-1){
str1[n1]=str2[n1]+str1[n2];
n1++;
n2++;
}/*27-51使用差分算法*/
for(q=0;q<=n-1;q++){
if(q!=n-1){
printf("%d ",str1[q]);
}else{
printf("%d",str1[q]);
}/*依次输出带空格的数*/
}
t--;
}
return 0;
}
第一行是整数x,表示有x组样例,每组样例的第一行是整数y,表示有y个数组,第二行有y个数,表示每个数组的大小.第三行是整数z,表示z次操作,接下去的z行,每行有三个数字l,r,x,表示要把区间[l,r]中的每一个数加x.
比如:input:1
5
7 5 9 2 4
3
1 2 3
2 3 4
3 5 5
output :10 12 18 7 9
大家有办法优化这个代码吗?减少代码运行的时间。
发题目吧 你这循环太多了 时间复杂度O3了