求助神秘灵异事件

学术版

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

插眼,有结果了踢一脚,提前感谢了


|