StеlІаwіnD @ 2025-12-24 22:16:16
std::vector<int>A[1000010];
std::vector<pii>F[400000],Q[400010];
void solve(){
int n,q;read(n),read(q);
rep(i,1,n){
int x;read(x);
for(int j=1;j*j<=x;++j)if(x%j==0){
if(j!=1)A[j].pb(i);if(j*j!=x)A[x/j].pb(i);
}
}
rep(i,2,1000000)if(A[i].size()>=3){
int N=A[i].size(),cur=N-1;
nrep(j,N-3,0){
if(A[i][cur]-A[i][j+1]<A[i][j+1]-A[i][j])continue;
while(cur>j+2&&A[i][cur-1]-A[i][j+1]>=A[i][j+1]-A[i][j])--cur;
F[A[i][cur]].pb(A[i][j],i);
}
}
}
这是一段非常简单的代码。题目是https://qoj.ac/contest/1784/problem/9250
但是这个题我一开始交上去RE了。报了一个munmap_chunk(): invalid pointer,我也看不懂是什么东西。
我在最后这个for循环里每一次输出i,发现他会在随机位置炸掉。
但是!!!我把第一行的1000010改成1200010就过了。
有没有懂C++的同学解说一下!!!感谢!!!
by csxx601cjy @ 2025-12-24 22:17:37
qp
by zhtisgreat @ 2025-12-24 22:17:47
qp
by PauseView @ 2025-12-24 22:19:00
qp
by zhangchi1234 @ 2025-12-24 22:21:31
N是什么
by zbl2012 @ 2025-12-24 22:24:38
@迟暮天复明eee可以看一下你的read()吗
by StеlІаwіnD @ 2025-12-24 22:38:53
@zbl2012 read我用了快六年了,我认为应该不会出问题(
by luogu_gza @ 2025-12-24 22:46:12
@迟暮天复明 先把 read 换成正常的读入排除一下问题呗
by ShwStone @ 2025-12-24 22:47:17
no ideas,但是我试了一下把最后一份代码 A 开成 1000010 也过了,所以不是你描述的问题。
by StеlІаwіnD @ 2025-12-24 22:50:15
@ShwStone 我擦,不会是我留着debug炸的吧
by KNO3 @ 2025-12-24 23:02:06
插眼,有结果了踢一脚,提前感谢了