lrq090403 @ 2022-05-21 15:42:19
here
前面四份代码除注释与变量名之外其他的完全一样,但O2与无O2差别很大,希望有人来解释一下,谢谢orz
O2:100分,27~28ms;无O2:80分,21~22ms(#5RE).
by lrq090403 @ 2022-05-21 15:43:16
代码:
#include<cstdio>
inline int s(){
char c='a';
while((c>'9'||c<'0')&&c!='-')c=getchar();
int ans=0,f=1;
while(1){
if(c=='-')f=-f;
else if(c<='9'&&c>='0')ans=ans*10+c-'0';
else break;
c=getchar();
}
return f*ans;
}
int a,b,i,x,k[505050],cf,mi;
int main(){
for(a=s(),b=s();i<a;++i)k[i]=s()-cf,cf+=k[i];
for(;b;--b){
i=s(),cf=s(),x=s();
k[i-1]+=x,k[cf]-=x;
}
for(mi=k[0],i=1;i<a;++i)k[i]+=k[i-1],mi=(k[i]<mi?k[i]:mi);
if(mi<1)mi=1;
return(printf("%d",mi)&0);
}
by StillEmpty @ 2022-05-21 15:45:43
Undefined Behavior 导致的
by wutiruo @ 2022-05-21 15:45:47
@lrq090403 O2实际上是编译器在编译代码时内部修改了代码来优化,因而可能导致程序没有想预期的运行
by lrq090403 @ 2022-05-21 15:47:16
谢谢神犇们的帮助,此帖完结。
by lrq090403 @ 2022-05-21 15:48:40
此外我好像找到了RE的真正原因: k数组开的5e5