セグメント ツリーを使用して、SPOJ 問題GSS1 (これらのクエリに答えられますか?)を解決しようとしています。「init」メソッドを使用してツリーを初期化し、「query」メソッドを使用して範囲 [i,j] の最大値を取得しています。
リミット |A[i]| <= 15707 および 1<=N (要素数)<=50000。
int A[50500], tree[100500];
void init(int n, int b, int e) // n=1, b=lower, e=end
{
if(b == e)
{
tree[n] = A[b];
return;
}
init(2 * n, b, (b + e) / 2);
init(2 * n + 1, ((b + e) / 2) + 1, e);
tree[n] = (tree[2 * n] > tree[2 * n + 1]) ? tree[2 * n] : tree[2 * n + 1];
}
int query(int n, int b, int e, int i, int j) // n=1, b=lower, e=end, [i,j]=range
{
if(i>e || j<b)
return -20000;
if(b>=i && e<=j)
return tree[n];
int p1 = query(2 * n, b, (b + e) / 2, i, j);
int p2 = query(2 * n + 1, ((b + e) / 2) + 1, e, i, j);
return (p1 > p2) ? p1 : p2;
}
ほとんどの場合 (負の数、奇数/偶数 N) のコードをデバッグしましたが、アルゴリズムの何が問題なのかわかりません。
誰かが私を正しい方向に向けることができれば、私は感謝します.
ありがとう