C/C++の宿題を片づけます 50代目
■ このスレッドは過去ログ倉庫に格納されています
0234デフォルトの名無しさん
2005/09/16(金) 17:39:081.左端からi番目の要素までの和からなる列を作る。元が
-10, 31, 40
なら、
0, -10, 21, 61
になる。ここから二数を選んで、右から左を引くと対応する部分列の和になる。O(n)。
2.この列を覚えておいて、ソートしたコピーを作る。O(n log n)。
3.できたコピーを双方向リストと平衡木の二重構造に入れる。O(n)。
この平衡木は、削除O(log n)、探索O(log n)で、「あるキーに最も近い要素」の探索もO(log n)
4.覚えておいた列の左から順にポインタpが動く間、次のことをする。O(n log n)
i: 平衡木から*pを削除。O(log n)
ii: *pとの差が問題の数に最も近くなる要素を平衡木から探索。O(log n)
■ このスレッドは過去ログ倉庫に格納されています