Codechef March Long Contestの Question GCD ConditionでWA を取得しています。
私が何を間違えたか、またはコードが間違った答えを生成するテストケースを教えてください。
すべての素数に RMQ(Range maximum Query) を使用しました
for(i=0;i<limit;i++)
{
int sz=b[i].size();
if(!sz)continue;
int level=0;
cc[i].resize(sz);
for(j=0;j<sz;j++)cc[i][j].push_back(b[i][j]);//level 0
for(level=1;(1<<level)<=sz;level++)
{
for(j=0;j+(1<<level)<=sz;j++)
{
int c1=cc[i][j][level-1];
int c2=cc[i][j+(1<<(level-1))][level-1];
int mx=(a[c1]<a[c2])?c2:c1;
cc[i][j].push_back(mx);
}
}
}
まず、次のような構造に変換しました:-
入力例:- 10 6 20 15 8
(b[i]--> i の因数のインデックスを格納)
b[2]--> 1,2,3,5
b[3]--> 2,4
b [5]--> 1,3,4
RMQ を実装すると、次のようになります。
(cc[i][j][k] は、b[i][j] と b[i][j+(2^k)-1] の間の最大要素のインデックスを格納します)
cc[2][0]-- >1,2,3,5
cc[2][1]-->1,3,3
cc[2][2]-->3
cc[3][0]-->2,4
cc[3][1]-->4
cc[5][0]-->1,3,4
cc[5][1]-->3