我写了这样一段代码
……
for(int i=0;i<ve1.size()-2;i++){
if(ve1[i+1].second==ve1[i+1].first){
if(a[ve1[i].second]+1<a[ve1[i+2].first]){
ans=max(ans,ve1[i+2].second-ve1[i].first+1);
}
}
}
printf("%lld\n",ans);
return 0;
}
(其中省略号代表无关部分)
在运行这段代码时,这个样例出现了RE,在debug时发现RE原因是这个循环被运行了导致ve1的越界,然鹅ve1.size()在运行到这里时为1,并不应该进入该循环
后经过修改这段代码过了
……
for(int i=0;i<(ve1.size()-2);i++){
if(i<(ve1.size()-2)){
break;
}
if(ve1[i+1].second==ve1[i+1].first){
if(a[ve1[i].second]+1<a[ve1[i+2].first]){
ans=max(ans,ve1[i+2].second-ve1[i].first+1);
}
}
}
printf("%lld\n",ans);
return 0;
}
请问这是为什么?
省略号部分