求助。在c++软件上测试的时候,无法输入,但在洛谷上运行是60分

P2367 语文成绩

zxf1019 @ 2022-03-17 22:33:02


 #include<iostream>
 using  namespace std;
 int main(){
    int m,n,x,y,z;
     cin>>m>>n;
     int a[5000001];
     int min=101;
     for(int i=0;i<m;i++) {
        cin>>a[i];//输入最初成绩 
     }
     for(int j=0;j<n;j++){
        cin>>x>>y>>z;
        for(int i=x-1;i<=y-1;i++){
            a[i]=a[i]+z;
         }
     }
     for(int i=0;i<m;i++){
        min=a[i]<min?a[i]:min;
     }
     cout<<min;
     return 0;
     }

by Qing_fy @ 2022-03-17 22:35:35

请把a[]开在外面。你的程序无法输入是因为爆栈了,开在里面a[]占用栈空间,而栈空间非常有限。但是开在外面就没有影响。


by Micnation_AFO @ 2022-03-17 22:37:01

@zxf1019

  1. 把数组开到外面即可,亲测有效
  2. 60 分的原因是因为这题要用差分数组,你这种方法不能 AC

by zxf1019 @ 2022-03-17 22:43:45

@Qing_fy 感谢感谢,我去试试。


by zxf1019 @ 2022-03-17 22:45:17

@Leap_hash_jperm 谢谢指正,非常感谢。


by zxf1019 @ 2022-03-17 23:04:30

@Leap_hash_jperm 但是为什么要用差分?求解


by Terrible @ 2022-03-17 23:25:49

不是说必须用差分,只是你的程序的运行效率太拉了,跑不过去,建议你用差分。

实际上可能可以找其他方法不用差分也能完成这道题。


by zxf1019 @ 2022-03-17 23:33:08

嗯,嗯,感谢!


by dingshengyang @ 2022-07-15 15:18:38

@Terrible 线段树


|