aboutsummaryrefslogtreecommitdiffstats
path: root/README.html
diff options
context:
space:
mode:
authorcathook <b01902109@csie.ntu.edu.tw>2014-04-22 02:22:21 +0800
committercathook <b01902109@csie.ntu.edu.tw>2014-04-22 02:22:21 +0800
commita18df7f42f62932001cbb1c61c458abaf5d8bace (patch)
tree9e350f8f32a50ee76636ae6cb94e925a832239f6 /README.html
parent1817d739e89b1d4c1c09d5f553ce5068fab0e4d7 (diff)
downloadmeow-a18df7f42f62932001cbb1c61c458abaf5d8bace.tar
meow-a18df7f42f62932001cbb1c61c458abaf5d8bace.tar.gz
meow-a18df7f42f62932001cbb1c61c458abaf5d8bace.tar.bz2
meow-a18df7f42f62932001cbb1c61c458abaf5d8bace.tar.lz
meow-a18df7f42f62932001cbb1c61c458abaf5d8bace.tar.xz
meow-a18df7f42f62932001cbb1c61c458abaf5d8bace.tar.zst
meow-a18df7f42f62932001cbb1c61c458abaf5d8bace.zip
重寫readme
Diffstat (limited to 'README.html')
-rw-r--r--README.html1192
1 files changed, 740 insertions, 452 deletions
diff --git a/README.html b/README.html
index e629055..b2a3db3 100644
--- a/README.html
+++ b/README.html
@@ -352,8 +352,8 @@ body {
margin-top: 1em;
}
-.paragraph p, li, dd, .content { max-width: 90%; }
-.admonitionblock { max-width: 85%; }
+.paragraph p, li, dd, .content { max-width: 100%; }
+.admonitionblock { max-width: 95%; }
div.sectionbody div.ulist > ul > li {
list-style-type: square;
@@ -685,15 +685,19 @@ asciidoc.install(2);
<div class="sect1">
<h2 id="_description">Description</h2>
<div class="sectionbody">
-<div class="paragraph"><p>一個不需要, 也不建議先compile成obj files的templates.</p></div>
-<div class="admonitionblock">
-<table><tr>
-<td class="icon">
-<div class="title">Tip</div>
-</td>
-<td class="content"><strong>README.html</strong> is more beautiful.</td>
-</tr></table>
-</div>
+<div class="paragraph"><p>一個不需要, 也不應該先compile成obj files的templates.</p></div>
+<div class="ulist"><div class="title">Links</div><ul>
+<li>
+<p>
+<a href="https://github.com/cathook/meow">GitHub</a>
+</p>
+</li>
+<li>
+<p>
+<a href="http://www.csie.ntu.edu.tw/~b01902109/readme/template_meow/README.html">README.html</a>
+</p>
+</li>
+</ul></div>
</div>
</div>
<div class="sect1">
@@ -705,10 +709,10 @@ asciidoc.install(2);
<li>
<p>
<strong>utility.h</strong> some useful functions,
- <span class="monospaced">stringPringf()</span> , <span class="monospaced">stringReplace</span> , <span class="monospaced">cstringEndWith</span> ,
+ <span class="monospaced">stringPringf()</span> , <span class="monospaced">stringReplace()</span> , <span class="monospaced">cstringEndWith()</span> ,
<span class="monospaced">debugPrintf()</span> , <span class="monospaced">messagePrintf()</span> , <span class="monospaced">constant PI</span> ,
- <span class="monospaced">noEPS()</span> , <span class="monospaced">normalize()</span> , <span class="monospaced">denormalize</span> ,
- <span class="monospaced">ratioMapping</span> , <span class="monospaced">inRange()</span> , <span class="monospaced">squ()</span> , <span class="monospaced">average()</span>
+ <span class="monospaced">noEPS()</span> , <span class="monospaced">normalize()</span> , <span class="monospaced">denormalize()</span> ,
+ <span class="monospaced">ratioMapping()</span> , <span class="monospaced">inRange()</span> , <span class="monospaced">squ()</span> , <span class="monospaced">average()</span>
</p>
</li>
<li>
@@ -728,20 +732,20 @@ asciidoc.install(2);
</li>
<li>
<p>
-<strong>YUV.h</strong> <span class="monospaced">class YUVi</span> , <span class="monospaced">class YUVf</span> , <span class="monospaced">RGB_to_YUV()</span> , <span class="monospaced">YUV_to_RGB</span>
+<strong>YUV.h</strong> <span class="monospaced">class YUVi</span> , <span class="monospaced">class YUVf</span> , <span class="monospaced">RGB_to_YUV()</span> , <span class="monospaced">YUV_to_RGB()</span>
</p>
</li>
<li>
<p>
-<strong>HSL.h</strong> <span class="monospaced">class HSLf</span> , <span class="monospaced">RGB_to_HSL()</span> , <span class="monospaced">HSL_to_RGB</span> ,
- <span class="monospaced">YUV_to_HSL()</span> , <span class="monospaced">HSL_to_YUV</span>
+<strong>HSL.h</strong> <span class="monospaced">class HSLf</span> , <span class="monospaced">RGB_to_HSL()</span> , <span class="monospaced">HSL_to_RGB()</span> ,
+ <span class="monospaced">YUV_to_HSL()</span> , <span class="monospaced">HSL_to_YUV()</span>
</p>
</li>
<li>
<p>
-<strong>HSV.h</strong> <span class="monospaced">class HSVf</span> , <span class="monospaced">RGB_to_HSV()</span> , <span class="monospaced">HSV_to_RGB</span> ,
- <span class="monospaced">YUV_to_HSV()</span> , <span class="monospaced">HSV_to_YUV</span> ,
- <span class="monospaced">HSL_to_HSV()</span> , <span class="monospaced">HSV_to_HSL</span>
+<strong>HSV.h</strong> <span class="monospaced">class HSVf</span> , <span class="monospaced">RGB_to_HSV()</span> , <span class="monospaced">HSV_to_RGB()</span> ,
+ <span class="monospaced">YUV_to_HSV()</span> , <span class="monospaced">HSV_to_YUV()</span> ,
+ <span class="monospaced">HSL_to_HSV()</span> , <span class="monospaced">HSV_to_HSL()</span>
</p>
</li>
</ul></div>
@@ -758,17 +762,22 @@ asciidoc.install(2);
</li>
<li>
<p>
-<strong>Heaps.h</strong> <span class="monospaced">class MergeableHeap</span>
+<strong>Heaps.h</strong> <span class="monospaced">class MergeableHeap&lt;Element&gt;</span>
+</p>
+</li>
+<li>
+<p>
+<strong>KD_Tree.h</strong> <span class="monospaced">class KD_Tree&lt;Vector, Scalar&gt;</span>
</p>
</li>
<li>
<p>
-<strong>KD_Tree.h</strong> <span class="monospaced">class KD_Tree</span>
+<strong>SegemenTree.h</strong> <span class="monospaced">class SegmentTree&lt;Value&gt;</span>
</p>
</li>
<li>
<p>
-<strong>SplayTree.h</strong> <span class="monospaced">class SplayTree</span>
+<strong>SplayTree.h</strong> <span class="monospaced">class SplayTree&lt;Key, Value&gt;</span>
</p>
</li>
</ul></div>
@@ -805,99 +814,104 @@ width:100%;
<col style="width:58%;">
<thead>
<tr>
-<th class="tableblock halign-right valign-top" >Name </th>
-<th class="tableblock halign-left valign-top" > Parameters </th>
-<th class="tableblock halign-left valign-top" > Return Type </th>
+<th class="tableblock halign-right valign-top" >Name </th>
+<th class="tableblock halign-left valign-top" > Parameters </th>
+<th class="tableblock halign-left valign-top" > Return_Type </th>
<th class="tableblock halign-left valign-top" > Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>stringPrintf</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(char const * fmt, &#8230;)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(char const * <span class="monospaced">fmt</span>, &#8230;)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">std::string</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">Format print to C++ string and return it</p></td>
</tr>
<tr>
<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>stringReplace</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(std::string str,<br>
-std::string const&amp; from,<br>
-std::string const&amp; to)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(std::string <span class="monospaced">str</span>,<br></p>
+<p class="tableblock">std::string const&amp; <span class="monospaced">from</span>,<br></p>
+<p class="tableblock">std::string const&amp; <span class="monospaced">to</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">std::string</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">Return a string like <span class="monospaced">str</span>, but all <span class="monospaced">from</span> be replaced by <span class="monospaced">to</span></p></td>
</tr>
<tr>
<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>cstringEndWith</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(char const* str, int n, &#8230;)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(char const* <span class="monospaced">str</span>,<br>
+int <span class="monospaced">n</span>, &#8230;)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">bool</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">Return whether <span class="monospaced">str</span> is end with one of the c-string you specify in
the parameters or not</p></td>
</tr>
<tr>
<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>debugPrintf</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(char const* fmt, &#8230;)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(char const* <span class="monospaced">fmt</span>, &#8230;)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">Print debug message (file name, line number, &#8230;etc) when <span class="monospaced">DEBUG</span> is
defined</p></td>
</tr>
<tr>
<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>messagePrintf</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(int level_change, char const* fmt, &#8230;)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(int <span class="monospaced">level_change</span>,<br>
+char const* <span class="monospaced">fmt</span>, &#8230;)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">階層式的訊息輸出</p></td>
</tr>
<tr>
<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>noEPS</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(double value, double eps = 1e-9)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(double <span class="monospaced">value</span>, double <span class="monospaced">eps</span> = 1e-9)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">double</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">如果abs(輸入的數值) &lt; eps, 則回傳0, 否則回傳輸入的數值</p></td>
</tr>
<tr>
<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>normalize</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(double lower, double upper,<br>
-double value)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(double <span class="monospaced">lower</span>, double <span class="monospaced">upper</span>, <br>
+ double value)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">double</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(value - lower) / (upper - lower)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">(value - lower) / (upper - lower)</span></p></td>
</tr>
<tr>
<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>denormalize</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(double lower, double upper,<br>
-double ratio)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(double <span class="monospaced">lower</span>, double <span class="monospaced">upper</span>,
+<br>
+ double <span class="monospaced">ratio</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">double</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">lower + (upper - lower) * ratio</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">lower + (upper - lower) * ratio</span></p></td>
</tr>
<tr>
<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>ratioMapping</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(double l1, double u1,<br>
-double m1, double l2,<br>
-double u2)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(double <span class="monospaced">l1</span>, double <span class="monospaced">u1</span>,
+<br>
+double <span class="monospaced">m1</span>, double <span class="monospaced">l2</span>,<br>
+double <span class="monospaced">u2</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">double</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">denormalize(l2, u2, normalize(l1, u1, m1))</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">denormalize(l2, u2, normalize(l1, u1, m1))</span></p></td>
</tr>
<tr>
<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>inRange&lt;T&gt;</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(T const&amp; mn, T const&amp; mx,<br>
-T const&amp; v)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(T const&amp; <span class="monospaced">mn</span>, T const&amp; <span class="monospaced">mx</span>, <br>
+ T const&amp; <span class="monospaced">v</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">T</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">std::max(mn, std::min(mx, v))</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">std::max(mn, std::min(mx, v))</span></p></td>
</tr>
<tr>
<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>squ&lt;T&gt;</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(T const&amp; x)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(T const&amp; <span class="monospaced">x</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">T</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">x * x</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">x * x</span></p></td>
</tr>
<tr>
<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>average&lt;T&gt;</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(T const&amp; beg, T const&amp; end,<br>
-double sigs)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(T const&amp; <span class="monospaced">beg</span>, T const&amp; <span class="monospaced">end</span>, <br>
+ double <span class="monospaced">sigs</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">T</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">只將 <span class="monospaced">sigs</span> 個標準差以內的數據拿來取平均</p></td>
</tr>
<tr>
<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>average&lt;T&gt;</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(T const&amp; beg, T const&amp; end,<br>
-T const&amp; p, double sigs)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(T const&amp; <span class="monospaced">beg</span>, T const&amp; <span class="monospaced">end</span>,
+<br>
+ T const&amp; <span class="monospaced">p</span>, double <span class="monospaced">sigs</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">T</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">同上, 不過這次用 <span class="monospaced">p</span> 來加權平均</p></td>
</tr>
@@ -908,15 +922,29 @@ T const&amp; p, double sigs)</p></td>
<td class="icon">
<div class="title">Note</div>
</td>
-<td class="content"><span class="monospaced">stringReplace()</span> 不是用什麼好方法寫的因此執行效率很低請別虐待它.<br>
-額外附贈一個 <span class="monospaced">const double PI = 3.141592653589......</span></td>
+<td class="content">
+<div class="ulist"><ul>
+<li>
+<p>
+<span class="monospaced">stringReplace()</span> 不是用什麼好方法寫的因此執行效率很低請別虐待它.
+</p>
+</li>
+<li>
+<p>
+額外附贈一個 <span class="monospaced">const double PI = 3.141592653589......</span>
+</p>
+</li>
+</ul></div>
+</td>
</tr></table>
</div>
<hr>
</div>
<div class="sect2">
<h3 id="_meow_strong_usage_strong_c_class">meow:: <strong>Usage</strong> (C++ Class)</h3>
-<div class="paragraph"><div class="title">Description</div><p><span class="monospaced">Usage</span> 是用來分析argc, argv和輸出usage document的class.
+<div class="sect3">
+<h4 id="_description_2">Description</h4>
+<div class="paragraph"><p><span class="monospaced">Usage</span> 是用來分析argc, argv和輸出usage document的class.
argc, argv的部份, 有以下規則</p></div>
<div class="ulist"><ul>
<li>
@@ -937,7 +965,10 @@ argc, argv的部份, 有以下規則</p></div>
</p>
</li>
</ul></div>
-<div class="ulist"><div class="title">Methods</div><ul>
+</div>
+<div class="sect3">
+<h4 id="_methods">Methods</h4>
+<div class="ulist"><ul>
<li>
<p>
<span class="monospaced">Usage(String const&amp; _name)</span><br>
@@ -981,8 +1012,8 @@ String const&amp; value_type, String const&amp; value_default, bool must)</span>
<p>
<span class="monospaced">addOptionValueAccept(unsigned char option,
String const&amp; value, String const&amp; description)</span><br>
-針對某個option, 新增一個可接受的額外選項 (如果某個option從頭到尾都沒有
-新增可接受的選項, 則視為不限制), 回傳成功與否 <strong>(bool)</strong>
+針對某個option, 新增一個可接受的額外選項 (如果某個option從頭到尾都
+沒有新增可接受的選項, 則視為不限制), 回傳成功與否 <strong>(bool)</strong>
</p>
</li>
<li>
@@ -1052,13 +1083,30 @@ String const&amp; value, String const&amp; description)</span><br>
<td class="icon">
<div class="title">Note</div>
</td>
-<td class="content"><span class="monospaced">String</span> 是 <span class="monospaced">std::string</span> .<br>
-<span class="monospaced">Strings</span> 是 <span class="monospaced">std::vector&lt; std::string&gt; &gt;</span>.<br>
-如果沒有寫回傳什麼, 就是回傳 <span class="monospaced">void</span></td>
+<td class="content">
+<div class="ulist"><ul>
+<li>
+<p>
+<span class="monospaced">String</span> 是 <span class="monospaced">std::string</span> .
+</p>
+</li>
+<li>
+<p>
+<span class="monospaced">Strings</span> 是 <span class="monospaced">std::vector&lt; std::string&gt; &gt;</span>.
+</p>
+</li>
+<li>
+<p>
+如果沒有寫回傳什麼, 就是回傳 <span class="monospaced">void</span>
+</p>
+</li>
+</ul></div>
+</td>
</tr></table>
</div>
<hr>
</div>
+</div>
<div class="sect2">
<h3 id="_meow_strong_implementinterface_registerinterface_strong_c_class">meow:: <strong>ImplementInterface/RegisterInterface</strong> (C++ Class)</h3>
<div class="paragraph"><div class="title">Description</div><p>Assume there is a problem which can be solved by different algorithms.
@@ -1090,62 +1138,68 @@ which will return the pointer to the corresponding class.
</div>
<div class="sect2">
<h3 id="_meow_strong_disjointset_strong_c_class">meow:: <strong>DisjointSet</strong> (C++ class)</h3>
-<div class="paragraph"><div class="title">Description</div><p><span class="monospaced">DisjointSet</span> is a lighting data structure that maintain N numbers from
-<strong>0</strong> to <strong>N-1</strong> with methods below:</p></div>
+<div class="sect3">
+<h4 id="_description_3">Description</h4>
+<div class="paragraph"><p><span class="monospaced">DisjointSet</span> 是個<strong>輕量級Data Dtructure</strong>, 用來維護一堆互斥集的資訊.
+相關資料可參考
+<a href="http://www.csie.ntnu.edu.tw/~u91029/DisjointSets.html">演算法筆記</a></p></div>
+</div>
+<div class="sect3">
+<h4 id="_support_methods">Support Methods</h4>
<table class="tableblock frame-all grid-rows"
style="
width:100%;
">
-<col style="width:5%;">
-<col style="width:5%;">
-<col style="width:26%;">
-<col style="width:5%;">
-<col style="width:5%;">
-<col style="width:52%;">
+<col style="width:2%;">
+<col style="width:8%;">
+<col style="width:18%;">
+<col style="width:8%;">
+<col style="width:8%;">
+<col style="width:54%;">
<thead>
<tr>
<th class="tableblock halign-right valign-top" >Const?</th>
-<th class="tableblock halign-left valign-top" >Name</th>
-<th class="tableblock halign-left valign-top" > Parameters</th>
-<th class="tableblock halign-left valign-top" > Return Type</th>
-<th class="tableblock halign-left valign-top" > Time Complexity</th>
+<th class="tableblock halign-right valign-top" >Name </th>
+<th class="tableblock halign-left valign-top" > Parameters </th>
+<th class="tableblock halign-left valign-top" > Return_Type</th>
+<th class="tableblock halign-center valign-top" > Time_Complexity</th>
<th class="tableblock halign-left valign-top" > Description</th>
</tr>
</thead>
<tbody>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock">const</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>root</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(size_t number)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>root</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(size_t <span class="monospaced">number</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">size_t</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">very fast</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Return the <strong>group id</strong> of the number given</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">very fast</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">回傳 <span class="monospaced">number</span> 所在的 <strong>集合的編號</strong> (0~N-1)</p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock">const</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>size</strong></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>size</strong></p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">()</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">size_t</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">very fast</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Return <strong>N</strong></p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">very fast</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">回傳 <strong>總集合大小</strong></p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>reset</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(size_t N)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>reset</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(size_t <span class="monospaced">N</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">very fast</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Clean and initalize</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(N)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">清空, 並且設定總集合大小為 <span class="monospaced">N</span></p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>merge</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(size_t number1,<br>
-size_t number2)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>merge</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(size_t <span class="monospaced">number1</span>,<br>
+size_t <span class="monospaced">number2</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">size_t</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">very fast</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>Union</strong> the group contains number1 and the group contains number2.
-Return the merged group id</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">very fast</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">將 <span class="monospaced">number1</span> 所在的集合 跟 <span class="monospaced">number2</span> 所在的集合 <strong>合併</strong>,
+並回傳合併後新的集合的編號</p></td>
</tr>
</tbody>
</table>
@@ -1154,31 +1208,73 @@ Return the merged group id</p></td>
<td class="icon">
<div class="title">Note</div>
</td>
-<td class="content"><strong>very fast</strong> means that you can consider it as constant time.</td>
-</tr></table>
-</div>
-<hr>
-</div>
-<div class="sect2">
-<h3 id="_meow_strong_mergeableheap_lt_key_value_gt_strong_c_class">meow:: <strong>MergeableHeap&lt;Key, Value&gt;</strong> (C++ class)</h3>
-<div class="paragraph"><div class="title">Description</div><p>MergeableHeap is a kind of maximum-heap with a special method <span class="monospaced">merge</span>,
-which will merge another MergeableHeap into itself in O(logN) time.</p></div>
-<div class="ulist"><div class="title">Template Request</div><ul>
+<td class="content">
+<div class="ulist"><ul>
<li>
<p>
-<span class="monospaced">Key</span> should has <span class="monospaced">operator&lt;</span>
+<strong>very fast</strong> 表示它算的真的超級快, 可以視為常數時間.
</p>
</li>
-</ul></div>
-<div class="ulist"><div class="title">Support methods</div><ul>
<li>
<p>
-N &#8592; number of elements in the heap
+預設值所有 <span class="monospaced">number</span> 所在的集合的編號就是 <span class="monospaced">number</span> 本身,
+即沒有任兩個數在同一個set裡面
</p>
</li>
+</ul></div>
+</td>
+</tr></table>
+</div>
+<hr>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_meow_strong_mergeableheap_lt_element_gt_strong_c_class">meow:: <strong>MergeableHeap&lt;Element&gt;</strong> (C++ class)</h3>
+<div class="sect3">
+<h4 id="_description_4">Description</h4>
+<div class="paragraph"><p>一個用 <strong>左偏樹</strong> 實作的 <strong>Maximum-Heap</strong> , 除了原本heap有的功能外,
+還支援 <span class="monospaced">merge</span>, <span class="monospaced">split</span> 等功能</p></div>
+</div>
+<div class="sect3">
+<h4 id="_template_class_operators_request">Template Class Operators Request</h4>
+<table class="tableblock frame-all grid-rows"
+style="
+width:70%;
+">
+<col style="width:3%;">
+<col style="width:3%;">
+<col style="width:10%;">
+<col style="width:17%;">
+<col style="width:10%;">
+<col style="width:53%;">
+<thead>
+<tr>
+<th class="tableblock halign-right valign-top" >Const?</th>
+<th class="tableblock halign-left valign-top" >Typename</th>
+<th class="tableblock halign-left valign-top" > Operator </th>
+<th class="tableblock halign-left valign-top" > Parameters </th>
+<th class="tableblock halign-left valign-top" > Return_Type</th>
+<th class="tableblock halign-left valign-top" > Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Element</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator&lt;</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Element <span class="monospaced">v</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">bool</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">大小比較</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="sect3">
+<h4 id="_support_methods_2">Support Methods</h4>
+<div class="ulist"><ul>
<li>
<p>
-M &#8592; number of elements in the other heap if need
+N &#8592; <span class="monospaced">this</span> 中擁有的資料數
</p>
</li>
</ul></div>
@@ -1186,94 +1282,88 @@ M &#8592; number of elements in the other heap if need
style="
width:100%;
">
+<col style="width:2%;">
<col style="width:5%;">
-<col style="width:5%;">
-<col style="width:17%;">
-<col style="width:5%;">
-<col style="width:5%;">
-<col style="width:58%;">
+<col style="width:19%;">
+<col style="width:8%;">
+<col style="width:8%;">
+<col style="width:55%;">
<thead>
<tr>
<th class="tableblock halign-right valign-top" >Const?</th>
-<th class="tableblock halign-left valign-top" >Name</th>
-<th class="tableblock halign-left valign-top" > Parameters</th>
-<th class="tableblock halign-left valign-top" > Return Type</th>
-<th class="tableblock halign-left valign-top" > Time Complexity</th>
+<th class="tableblock halign-right valign-top" >Name </th>
+<th class="tableblock halign-left valign-top" > Parameters </th>
+<th class="tableblock halign-left valign-top" > Return_Type</th>
+<th class="tableblock halign-center valign-top" > Time_Complexity</th>
<th class="tableblock halign-left valign-top" > Description</th>
</tr>
</thead>
<tbody>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator=</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(MergeableHeap const&amp;)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">*this</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">O(N)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Copy operator.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>moveTo</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(MergeableHeap*)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>moveTo</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(MergeableHeap* <span class="monospaced">h</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">O(M)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Transform the this&#8594;data to the heap specified in parameters</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(M)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">將 <span class="monospaced">this</span> 的資料複寫到 <span class="monospaced">h</span> 上面, 同時清空自己,
+時間複雜度中的M是 <span class="monospaced">h</span> 所擁有的資料數</p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock">const</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>top</strong></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>top</strong></p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">()</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Element</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">O(1)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Return the maximum element in the heap.</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Element const&amp;</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(1)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">回傳最大的那個 <span class="monospaced">Element</span></p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock">const</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>size</strong></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>size</strong></p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">()</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">size_t</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">O(1)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Return the number of elements in the heap.</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(1)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">回傳 <span class="monospaced">this</span> 中擁有的資料數</p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock">const</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>empty</strong></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>empty</strong></p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">()</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">bool</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">O(1)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Return whether the heap is empty or not.</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(1)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">回傳 <span class="monospaced">this</span> 是否為空</p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>push</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(Element)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>push</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Element const&amp; <span class="monospaced">e</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">O(log N)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Add a element into the heap</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">將 <span class="monospaced">e</span> 加入</p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>pop</strong></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>pop</strong></p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">()</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">O(log N)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Delete the maximum element from the heap</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">將最大的 <span class="monospaced">Element</span> 移除</p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>merge</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(MergeableHeap*)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>clear</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">()</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">O(log M)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Merge the specified MergeableHeap(with size=M) into itself</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(N)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">將資料清空</p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>clear</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">()</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>merge</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(MergeableHeap* <span class="monospaced">heap2</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">O(N)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Delete all elements from the heap</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN+logM)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">將 <span class="monospaced">heap2</span> 的資料統統加到 <span class="monospaced">this</span> 中, 並且清空 <span class="monospaced">heap2</span>
+時間複雜度中的M是 <span class="monospaced">heap2</span> 的資料數</p></td>
</tr>
</tbody>
</table>
@@ -1282,51 +1372,134 @@ width:100%;
<td class="icon">
<div class="title">Warning</div>
</td>
-<td class="content">Consider there are two MergeableHeap <span class="monospaced">A</span> and <span class="monospaced">B</span>.<br>
-<span class="monospaced">B</span> will become empty after you call <span class="monospaced">A.merge(&amp;B)</span>.<br>
-The data in <span class="monospaced">B</span> will override by data in <span class="monospaced">A</span> and <span class="monospaced">A</span> will become empty after
-you call <span class="monospaced">A.moveTo(&amp;B)</span></td>
-</tr></table>
-</div>
-<hr>
-</div>
-<div class="sect2">
-<h3 id="_meow_strong_kd_tree_lt_vector_scalar_gt_strong_c_class">meow:: <strong>KD_Tree&lt;Vector, Scalar&gt;</strong> (C++ class)</h3>
-<div class="paragraph"><div class="title">Description</div><p><span class="monospaced">KD_Tree</span> is <strong>K-dimension tree</strong>, which is a multiple set contain lots of
-vector with K dimension.</p></div>
-<div class="ulist"><div class="title">Template Request</div><ul>
+<td class="content">
+<div class="ulist"><ul>
<li>
<p>
-<span class="monospaced">Vector</span> should has <span class="monospaced">operator[]</span> to allow the KD_Tree, <span class="monospaced">operator&lt;</span> to
-compare when two vector are point to the same place, <span class="monospaced">operator==</span>
-access the k-dimensions
+假設現在有兩個MergeableHeap <span class="monospaced">A</span> 和 <span class="monospaced">B</span>, 則:
</p>
-</li>
+<div class="ulist"><ul>
<li>
<p>
-<span class="monospaced">Scalar</span> should has <span class="monospaced">operator*</span>, <span class="monospaced">operator+</span>, <span class="monospaced">operator&lt;</span>
+執行 <span class="monospaced">A.merge(&amp;B)</span> 後 <span class="monospaced">B</span> 會變成空的
</p>
</li>
-</ul></div>
-<div class="ulist"><div class="title">Support Methods</div><ul>
<li>
<p>
-N &#8592; numbers of element in the kd-tree
+執行 <span class="monospaced">B.moveTo(&amp;A)</span> 後 <span class="monospaced">B</span> 會變成空的, <span class="monospaced">A</span> 原本擁有的資料也會覆蓋掉
</p>
</li>
+</ul></div>
+</li>
+</ul></div>
+</td>
+</tr></table>
+</div>
+<hr>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_meow_strong_kd_tree_lt_vector_scalar_gt_strong_c_class">meow:: <strong>KD_Tree&lt;Vector, Scalar&gt;</strong> (C++ class)</h3>
+<div class="sect3">
+<h4 id="_description_5">Description</h4>
+<div class="paragraph"><p><span class="monospaced">KD_Tree</span> 全名k-dimension tree, 用來維護由 <strong>N個K維度向量所成的集合</strong>,
+並可於該set中查找 <strong>前i個離給定向量最接近的向量</strong></p></div>
+</div>
+<div class="sect3">
+<h4 id="_template_class_operators_request_2">Template Class Operators Request</h4>
+<table class="tableblock frame-all grid-rows"
+style="
+width:70%;
+">
+<col style="width:3%;">
+<col style="width:3%;">
+<col style="width:10%;">
+<col style="width:17%;">
+<col style="width:10%;">
+<col style="width:53%;">
+<thead>
+<tr>
+<th class="tableblock halign-right valign-top" >Const?</th>
+<th class="tableblock halign-left valign-top" >Typename</th>
+<th class="tableblock halign-left valign-top" > Operator </th>
+<th class="tableblock halign-left valign-top" > Parameters </th>
+<th class="tableblock halign-left valign-top" > Return_Type</th>
+<th class="tableblock halign-left valign-top" > Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Vector</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator[]</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(size_t <span class="monospaced">n</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">取得第 <span class="monospaced">n</span> 維度量</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Vector</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator&lt;</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Vector <span class="monospaced">v</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">bool</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">權重比較</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator*</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Scalar <span class="monospaced">s</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">相乘</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator+</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Scalar <span class="monospaced">s</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">相加</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator-</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Scalar <span class="monospaced">s</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">相差</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator&lt;</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Scalar <span class="monospaced">s</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">bool</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">大小比較</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="sect3">
+<h4 id="_custom_type_definitions">Custom Type Definitions</h4>
+<div class="ulist"><ul>
<li>
<p>
-K &#8592; dimensions
+<span class="monospaced">Vectors</span> &#8592; <span class="monospaced">std::vector&lt;Vector&gt;</span>
</p>
</li>
+</ul></div>
+</div>
+<div class="sect3">
+<h4 id="_support_methods_3">Support Methods</h4>
+<div class="ulist"><ul>
<li>
<p>
-<span class="monospaced">Vector</span> is the tyepname of the vector
+N &#8592; <span class="monospaced">this</span> 中擁有的資料數
</p>
</li>
<li>
<p>
-<span class="monospaced">Vectors</span> is the typename of the std::vector&lt;Vector&gt;
+K &#8592; <span class="monospaced">this</span> 資料維度
</p>
</li>
</ul></div>
@@ -1334,82 +1507,83 @@ K &#8592; dimensions
style="
width:100%;
">
-<col style="width:5%;">
-<col style="width:5%;">
-<col style="width:25%;">
-<col style="width:5%;">
-<col style="width:10%;">
-<col style="width:50%;">
+<col style="width:2%;">
+<col style="width:8%;">
+<col style="width:18%;">
+<col style="width:8%;">
+<col style="width:8%;">
+<col style="width:54%;">
<thead>
<tr>
<th class="tableblock halign-right valign-top" >Const?</th>
-<th class="tableblock halign-left valign-top" >Name</th>
-<th class="tableblock halign-left valign-top" > Parameters</th>
-<th class="tableblock halign-left valign-top" > Return Type</th>
-<th class="tableblock halign-left valign-top" > Time Complexity</th>
+<th class="tableblock halign-right valign-top" >Name </th>
+<th class="tableblock halign-left valign-top" > Parameters </th>
+<th class="tableblock halign-left valign-top" > Return_Type</th>
+<th class="tableblock halign-center valign-top" > Time_Complexity</th>
<th class="tableblock halign-left valign-top" > Description</th>
</tr>
</thead>
<tbody>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock">const</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>root</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(size_t number)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">size_t</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">very fast</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>insert</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(Vector const&amp; v)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>insert</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Vector const&amp; <span class="monospaced">v</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">O(1)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Insert a vector</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(1)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">將向量 <span class="monospaced">v</span> 加到set中</p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>erase</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(Vector const&amp; v)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>erase</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Vector const&amp; <span class="monospaced">v</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">bool</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">O(N*x)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Find a vector which is the same
-as <span class="monospaced">v</span> and remove it from the KD_Tree, <span class="monospaced">x</span> in the Big-O time complex
-is cost by <span class="monospaced">Vector::operator==</span>.</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(N)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">將向量 <span class="monospaced">v</span> 從set中移除, <em><sub>TODO:可以再優化</sub></em></p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>build</strong></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>build</strong></p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">()</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">O(KN logN) if need</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Build the data structure if need.</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(KN logN) or O(1)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">檢查距上一次 <span class="monospaced">build()</span> 至今是否有 <span class="monospaced">insert/erase</span> 被呼叫,
+若有, 重新建樹, 否則不做事</p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>forceBuild</strong></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>forceBuild</strong></p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">()</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">O(KN logN)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Build the data structure(the <span class="monospaced">insert()</span>
-method will not build the data structure immediately)</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(KN logN)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">重新建樹</p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock">const</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>query</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(Vector const&amp; v, int k)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>query</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Vector const&amp; <span class="monospaced">v</span>,<br>
+size_t <span class="monospaced">i</span>,<br>
+bool <span class="monospaced">cmp</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">Vectors</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">O(kN <sup>1-1/k</sup> )</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Using Euclidean-Distance to find the 1st to k-th nearest neighbor from <span class="monospaced">v</span> .
-And return;</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(KN <sup>1-1/K</sup> )</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">於set中找尋距離 <span class="monospaced">v</span> 前 <span class="monospaced">i</span> 近的向量, 並依照由近而遠的順序排序.
+如果有兩個向量 <span class="monospaced">v1</span>,<span class="monospaced">v2</span> 距離一樣, 且 <span class="monospaced">cmp</span> 為 <span class="monospaced">true</span> , 則直接依照
+<span class="monospaced">v1 &lt; v2</span> 來決定誰在前面. 最後回傳一陣列包含所有解.</p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>clear</strong></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>clear</strong></p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">()</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">O(1)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Clear all data</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(1)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">清空所有資料</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>reset</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(size_t <span class="monospaced">dimension</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(1)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">清空所有資料並且指定維度為 <span class="monospaced">dimension</span></p></td>
</tr>
</tbody>
</table>
@@ -1418,70 +1592,129 @@ And return;</p></td>
<td class="icon">
<div class="title">Note</div>
</td>
-<td class="content">O(kN <sup>1-1/k</sup> ) is reference from wiki.<br>
-<span class="monospaced">query()</span> and <span class="monospaced">rangeQuery()</span> will run <span class="monospaced">build()</span> first if you called <span class="monospaced">insert()</span>
-before call them. And <span class="monospaced">build()</span> is very slow, so you should not use this class
-as a dynamic tree</td>
+<td class="content">
+<div class="ulist"><ul>
+<li>
+<p>
+此資料結構只有在 N &gt;&gt; 2 <sup>K</sup> 時才比較有優勢,
+當 K 逐漸變大時, 所花時間會跟暴搜沒兩樣
+</p>
+</li>
+</ul></div>
+</td>
</tr></table>
</div>
<hr>
</div>
+</div>
<div class="sect2">
<h3 id="_meow_strong_splaytree_lt_key_value_gt_strong_c_class">meow:: <strong>SplayTree&lt;Key, Value&gt;</strong> (C++ class)</h3>
-<div class="paragraph"><div class="title">Description</div><p>Like <span class="monospaced">std::map</span>, <span class="monospaced">SplayTree</span> is an dictionary(key&#8594;value). But it has
-some extra method, such as <span class="monospaced">split()</span>, <span class="monospaced">merge()</span>, <span class="monospaced">keyOffset()</span>.</p></div>
-<div class="ulist"><div class="title">Data Type</div><ul>
+<div class="sect3">
+<h4 id="_description_6">Description</h4>
+<div class="paragraph"><p><span class="monospaced">SplayTree</span> 是一種神乎其技的資料結構, 維護一堆 Key&#8594;Value . 並且支援
+一些 <span class="monospaced">std::map</span> 難以快速實踐的操作, 如 <span class="monospaced">split</span> , <span class="monospaced">merge</span> , <span class="monospaced">keyOffset</span></p></div>
+</div>
+<div class="sect3">
+<h4 id="_template_class_operators_request_3">Template Class Operators Request</h4>
+<table class="tableblock frame-all grid-rows"
+style="
+width:70%;
+">
+<col style="width:3%;">
+<col style="width:3%;">
+<col style="width:10%;">
+<col style="width:17%;">
+<col style="width:10%;">
+<col style="width:53%;">
+<thead>
+<tr>
+<th class="tableblock halign-right valign-top" >Const?</th>
+<th class="tableblock halign-left valign-top" >Typename</th>
+<th class="tableblock halign-left valign-top" > Operator</th>
+<th class="tableblock halign-left valign-top" > Parameters </th>
+<th class="tableblock halign-left valign-top" > Return_Type</th>
+<th class="tableblock halign-left valign-top" > Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Key</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator+</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key <span class="monospaced">k</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Key</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">相加</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Key</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator&lt;</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key <span class="monospaced">k</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">bool</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">大小比較</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Key</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong><em>Key</em></strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(int <span class="monospaced">n</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">建構子, <span class="monospaced">n</span> 永遠是0</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Value</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong><em>Value</em></strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">( )</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">建構子</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="sect3">
+<h4 id="_custom_type_definitions_2">Custom Type Definitions</h4>
+<div class="ulist"><ul>
<li>
<p>
-<span class="monospaced">Key</span> is the tyepname of the key
+<span class="monospaced">Element</span> &#8594; 用來當作回傳資料的媒介
</p>
-</li>
+<div class="ulist"><ul>
<li>
<p>
-<span class="monospaced">Value</span> is the typename of value
+重定義 <span class="monospaced">operator-&gt;()</span> 到 <span class="monospaced">std::pair&lt;Key const&amp;, Value&amp;&gt;*</span>
</p>
</li>
<li>
<p>
-`SplayTree&lt;Key, Value&gt;:: <strong>Element</strong> ` is a typename which contain
-(key&#8594;value). It has some methods below:
-</p>
-<div class="ulist"><ul>
-<li>
-<p>
-<span class="monospaced">-&gt;first ` a constant reference to `Key</span>
+重定義 <span class="monospaced">operator*()</span> 到 <span class="monospaced">std::pair&lt;Key const&amp;, Value&amp;&gt;&amp;</span>
</p>
</li>
<li>
<p>
-<span class="monospaced">-&gt;second</span> a reference to <span class="monospaced">Value</span>
+有 <span class="monospaced">operator==</span> , <span class="monospaced">operator!=</span>, <span class="monospaced">operator=</span> 可用
</p>
</li>
<li>
<p>
-<span class="monospaced">operator==, operator!=</span> compare function, check if the two <span class="monospaced">Element</span>
-is pointer to the same (key&#8594;value)
+可以直接用 <span class="monospaced">(*e).second = some_value</span> 來改變SplayTree中的資料
</p>
</li>
</ul></div>
</li>
</ul></div>
-<div class="ulist"><div class="title">Template Request</div><ul>
-<li>
-<p>
-<span class="monospaced">Key</span> should has <span class="monospaced">operator&lt;</span>, <span class="monospaced">operator+</span>
-</p>
-</li>
-</ul></div>
-<div class="ulist"><div class="title">Support Methods</div><ul>
+</div>
+<div class="sect3">
+<h4 id="_support_methods_4">Support Methods</h4>
+<div class="ulist"><ul>
<li>
<p>
-N &#8592; numbers of element in the SplayTree
+N &#8592; <span class="monospaced">this</span> 中擁有的資料數
</p>
</li>
<li>
<p>
-M &#8592; numbers of element in another SplayTree
+M &#8592; <span class="monospaced">tree2</span> 中擁有的資料數
</p>
</li>
</ul></div>
@@ -1489,293 +1722,344 @@ M &#8592; numbers of element in another SplayTree
style="
width:100%;
">
-<col style="width:4%;">
-<col style="width:4%;">
-<col style="width:23%;">
-<col style="width:4%;">
-<col style="width:14%;">
-<col style="width:47%;">
+<col style="width:2%;">
+<col style="width:8%;">
+<col style="width:18%;">
+<col style="width:8%;">
+<col style="width:8%;">
+<col style="width:54%;">
<thead>
<tr>
<th class="tableblock halign-right valign-top" >Const?</th>
-<th class="tableblock halign-left valign-top" >Name</th>
-<th class="tableblock halign-left valign-top" > Parameters</th>
-<th class="tableblock halign-left valign-top" > Return Type</th>
-<th class="tableblock halign-center valign-top" > Time Complexity</th>
+<th class="tableblock halign-right valign-top" >Name </th>
+<th class="tableblock halign-left valign-top" > Parameters </th>
+<th class="tableblock halign-left valign-top" > Return_Type</th>
+<th class="tableblock halign-center valign-top" > Time_Complexity</th>
<th class="tableblock halign-left valign-top" > Description</th>
</tr>
</thead>
<tbody>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator=</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(SplayTree const&amp;)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">*this</p></td>
-<td class="tableblock halign-center valign-top" ><p class="tableblock">O(N)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">copy operator</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>moveTo</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(SplayTree* t)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>moveTo</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(SplayTree* <span class="monospaced">tree2</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
<td class="tableblock halign-center valign-top" ><p class="tableblock">O(M)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Transform the data in this to <span class="monospaced">t</span></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">將 <span class="monospaced">this</span> 的資料複寫到 <span class="monospaced">tree2</span> 上面, 同時清空自己,
+時間複雜度中的M是 <span class="monospaced">tree2</span> 所擁有的資料數</p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock">const</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>lowerBound</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key k)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>lowerBound</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key const&amp; <span class="monospaced">k</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">Element</p></td>
<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Find the smallest (key&#8594;value)
-which <span class="monospaced">k &lt;= key</span> and return</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">找出第一個(最小的) Element且 <span class="monospaced">k</span> &#8656; 它的 Key, 並且回傳之.
+找不到的話回傳 <span class="monospaced">this-&gt;end()</span></p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock">const</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>upperBound</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key k)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>lowerBound</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key const&amp; <span class="monospaced">k</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">Element</p></td>
<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Find the smallest (key&#8594;value)
-which <span class="monospaced">k &lt; key</span> and return</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">找出第一個(最小的) Element且 <span class="monospaced">k</span> &lt; 它的 Key, 並且回傳之.
+找不到的話回傳 <span class="monospaced">this-&gt;end()</span></p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock">const</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>rLowerBound</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key k)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>lowerBound</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key const&amp; <span class="monospaced">k</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">Element</p></td>
<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Find the largest (key&#8594;value)
-which <span class="monospaced">key &lt;= k</span> and return</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">找出第一個(最小的) Element且 <span class="monospaced">k</span> &gt;= 它的 Key, 並且回傳之.
+找不到的話回傳 <span class="monospaced">this-&gt;end()</span></p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock">const</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>rUpperBound</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key k)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>lowerBound</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key const&amp; <span class="monospaced">k</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">Element</p></td>
<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Find the largest (key&#8594;value)
-which <span class="monospaced">key &lt; k</span> and return</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">找出第一個(最小的) Element且 <span class="monospaced">k</span> &gt; 它的 Key, 並且回傳之.
+找不到的話回傳 <span class="monospaced">this-&gt;end()</span></p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock">const</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>find</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key k)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>find</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key const&amp; <span class="monospaced">k</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">Element</p></td>
<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Find the element (key&#8594;value) which
-<span class="monospaced">key == k</span> and return</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">找出 Key= <span class="monospaced">k</span> 的Elemenet 並回傳. 找不到的話回傳 <span class="monospaced">this-&gt;end()</span></p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock">const</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>order</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(size_t k)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>order</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(size_t <span class="monospaced">ord</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">Element</p></td>
<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Find the <span class="monospaced">k</span>-th small element.
-note that <span class="monospaced">k</span> start from zero like a normal C/C++ array.</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">將Elements依照Key由小到大排序, 回傳第 <span class="monospaced">ord</span> 個Element (由0算起).
+其中如果 <span class="monospaced">ord</span> &gt; N - 1, 則會回傳 <span class="monospaced">this-&gt;last()</span></p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock">const</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>first</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">()</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>first</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(size_t <span class="monospaced">ord</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">Element</p></td>
<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Return the smallest element</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">回傳Key最小的Element, 如果SplayTree為空, 則回傳 <span class="monospaced">this-&gt;end()</span></p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock">const</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>last</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">()</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>last</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(size_t <span class="monospaced">ord</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">Element</p></td>
<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Return the largest element</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">回傳Key最大的Element, 如果SplayTree為空, 則回傳 <span class="monospaced">this-&gt;end()</span></p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock">const</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>end</strong></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>end</strong></p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">()</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">Element</p></td>
<td class="tableblock halign-center valign-top" ><p class="tableblock">O(1)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Return an empty element(it can be use to
-check if <span class="monospaced">find()</span> is successful)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">回傳一個指向NULL的Element, 以供 <span class="monospaced">find</span> , <span class="monospaced">order</span> , <span class="monospaced">first</span>
+, <span class="monospaced">last</span> 等判斷是否有找到相對應的Element</p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock">const</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>size</strong></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>size</strong></p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">()</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">size_t</p></td>
<td class="tableblock halign-center valign-top" ><p class="tableblock">O(1)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Return number of elements in the tree</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">回傳資料數</p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock">const</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>empty</strong></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>size</strong></p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">()</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">bool</p></td>
<td class="tableblock halign-center valign-top" ><p class="tableblock">O(1)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Return whether the tree is empty</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">回傳是否為空</p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>clear</strong></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>clear</strong></p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">()</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
<td class="tableblock halign-center valign-top" ><p class="tableblock">O(N)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Clear</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">清空資料</p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>keyOffset</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key offset)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>keyOffset</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key const&amp; <span class="monospaced">delta</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
<td class="tableblock halign-center valign-top" ><p class="tableblock">O(1)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Let all the keys in the tree
-plus offset</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">將所有Element的Key同加上 <span class="monospaced">delta</span></p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>insert</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key k, Value v)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>insert</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key const&amp; <span class="monospaced">key</span>,<br>
+Value const&amp; <span class="monospaced">value</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">bool</p></td>
<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Insert an element.
-If the tree already has an element with same key, return <span class="monospaced">false</span>.</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">檢查是否已有Element的Key 為 <span class="monospaced">key</span>, 若有則回傳 <span class="monospaced">false</span> , 否則將
+一個 (Key &#8594; Value) = (<span class="monospaced">key</span> &#8594; <span class="monospaced">value</span>)的Element加入, 並回傳 <span class="monospaced">true</span>
+將所有Element的Key同加上 <span class="monospaced">delta</span></p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>erase</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key k)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>erase</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key const&amp; <span class="monospaced">key</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">bool</p></td>
<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Erase an element from the tree with
-given key. Return <span class="monospaced">false</span> if the element not found.</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">檢查是否已有Element的Key 為 <span class="monospaced">key</span>, 若有則刪除之, 並回傳 <span class="monospaced">true</span>,
+否則則回傳 <span class="monospaced">false</span></p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator[]</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key k)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Value</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>operator[]</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key const&amp; <span class="monospaced">key</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Value&amp;</p></td>
<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Like <span class="monospaced">find()</span> , but it will insert an element
-automatic if the corrosponding element not found</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">檢查是否已有Element的Key 為 <span class="monospaced">key</span>, 若有則回傳相對應的Value的Reference
+否則先執行 <span class="monospaced">insert(key, Value())</span> 再回傳相對應的Reference</p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>splitOut</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key const&amp; upper_bound,<br>
-SplayTree* out)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>splitOut</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Key const&amp; <span class="monospaced">upper_bound</span>,<br>
+SplayTree* <span class="monospaced">tree2</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
-<td class="tableblock halign-center valign-top" ><p class="tableblock">O(log N)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Split out all the elements with key
-larger than <span class="monospaced">upper_bound</span> and store then into <span class="monospaced">out</span></p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN) + O(M)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">將 <span class="monospaced">tree2</span> 清空, 再將所有Key &gt; <span class="monospaced">upper_bound</span> 的Element都丟到 <span class="monospaced">tree2</span></p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>mergeAfter</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(SplayTree* t)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">bool</p></td>
-<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN + logM)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">If not all of the elements in this
-are smaller than elements in <span class="monospaced">t</span>, return <span class="monospaced">false</span> , else merge <span class="monospaced">t</span> into
-itself and return <span class="monospaced">true</span>.</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>mergeAfter</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(SplayTree* <span class="monospaced">tree2</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN) + O(logM)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">檢查是否 <span class="monospaced">this</span> 中的 Key 都小於 <span class="monospaced">tree2</span> 中的Key, 是的話把 <span class="monospaced">tree2</span>
+中的 Element 都搬到 <span class="monospaced">this</span> , 同時清空 <span class="monospaced">tree2</span> , 回傳 <span class="monospaced">true</span>. 否則
+回傳 <span class="monospaced">false</span></p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>merge</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(SplayTree* t)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">bool</p></td>
-<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN + logM)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">If all of the elements in this
-are smaller than elements in <span class="monospaced">t</span> or all of the elements in this larger than
-elements in <span class="monospaced">t</span> , merge <span class="monospaced">t</span> into itself and return <span class="monospaced">true</span>.
-Else return <span class="monospaced">false</span></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>merge</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(SplayTree* <span class="monospaced">tree2</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN) + O(logM)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">檢查是否 <span class="monospaced">this</span> 中的 Key 都小於 <span class="monospaced">tree2</span> 中的Key 或者
+是否 <span class="monospaced">this</span> 中的 Key 都大於 <span class="monospaced">tree2</span> 中的Key, 是的話把 <span class="monospaced">tree2</span>
+中的 Element 都搬到 <span class="monospaced">this</span> , 同時清空 <span class="monospaced">tree2</span> , 回傳 <span class="monospaced">true</span>. 否則
+回傳 <span class="monospaced">false</span></p></td>
</tr>
</tbody>
</table>
<div class="admonitionblock">
<table><tr>
<td class="icon">
-<div class="title">Warning</div>
+<div class="title">Note</div>
</td>
-<td class="content">Consider there are two SplayTree <span class="monospaced">A</span> and <span class="monospaced">B</span>.<br>
-<span class="monospaced">B</span> will become empty after you call <span class="monospaced">A.mergeAfter(&amp;B)</span>
-or <span class="monospaced">A.merge(&amp;B)</span> successful.<br>
-The data in <span class="monospaced">B</span> will override by data in <span class="monospaced">A</span> and <span class="monospaced">A</span> will become empty after
-you call <span class="monospaced">A.moveTo(&amp;B)</span></td>
-</tr></table>
-</div>
-<hr>
-</div>
-<div class="sect2">
-<h3 id="_meow_strong_segmenttree_lt_value_gt_strong_c_class">meow:: <strong>SegmentTree&lt;Value&gt;</strong> (C++ class)</h3>
-<div class="paragraph"><div class="title">Description</div><p><span class="monospaced">SegmentTree</span> is a data structure that can maintain an array, and
-support <strong>range update</strong> , <strong>range query</strong></p></div>
-<div class="ulist"><div class="title">Template Request</div><ul>
-<li>
-<p>
-<span class="monospaced">Value</span> should has
-</p>
+<td class="content">
<div class="ulist"><ul>
<li>
<p>
-<span class="monospaced">operator+(Value)</span> offset
+假設現在有兩個SplayTree <span class="monospaced">A</span> 和 <span class="monospaced">B</span>, 則:
</p>
-</li>
+<div class="ulist"><ul>
<li>
<p>
-<span class="monospaced">operator|(Value)</span> merge two nodes
+執行 <span class="monospaced">B.moveTo(&amp;A)</span> 後 <span class="monospaced">B</span> 會變成空的, <span class="monospaced">A</span> 原本擁有的資料也會覆蓋掉
</p>
</li>
<li>
<p>
-<span class="monospaced">operator*(size_t)</span> ??
+執行 <span class="monospaced">A.merge(&amp;B)</span> 或 <span class="monospaced">A.mergeAfter(&amp;B)</span> 後
+如果檢查發現確實可以merge, 則之後 <span class="monospaced">B</span> 會變成空的
</p>
</li>
</ul></div>
</li>
</ul></div>
-<div class="paragraph"><p>For example, if you want to maintain <strong>range minimum</strong></p></div>
+</td>
+</tr></table>
+</div>
+<hr>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_meow_strong_segmenttree_lt_value_gt_strong_c_class">meow:: <strong>SegmentTree&lt;Value&gt;</strong> (C++ class)</h3>
+<div class="sect3">
+<h4 id="_description_7">Description</h4>
+<div class="paragraph"><p>維護一個陣列, 並且讓user可以有區間查詢, 區間修改的小東東</p></div>
+</div>
+<div class="sect3">
+<h4 id="_template_class_operators_request_4">Template Class Operators Request</h4>
+<table class="tableblock frame-all grid-rows"
+style="
+width:70%;
+">
+<col style="width:3%;">
+<col style="width:3%;">
+<col style="width:10%;">
+<col style="width:17%;">
+<col style="width:10%;">
+<col style="width:53%;">
+<thead>
+<tr>
+<th class="tableblock halign-right valign-top" >Const?</th>
+<th class="tableblock halign-left valign-top" >Typename</th>
+<th class="tableblock halign-left valign-top" > Operator </th>
+<th class="tableblock halign-left valign-top" > Parameters </th>
+<th class="tableblock halign-left valign-top" >Return_Type</th>
+<th class="tableblock halign-left valign-top" > Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Value</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator+</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Value <span class="monospaced">v</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Value</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">相加(位移)</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Value</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator*</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(size_t <span class="monospaced">n</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Value</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">每個Value都一樣,
+長為 <span class="monospaced">n</span> 的區間的值</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Value</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator|</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Value <span class="monospaced">v</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Value</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">區間合併後的值</p></td>
+</tr>
+</tbody>
+</table>
+<div class="ulist"><ul>
+<li>
+<p>
+若要維護區間最小值, 即每次都是詢問範圍 <span class="monospaced">[a, b]</span> 的最小值, 則可以定義
+</p>
<div class="ulist"><ul>
<li>
<p>
-<span class="monospaced">Value::operator+(Value v2)</span> will be <span class="monospaced">this-&gt;realValue + v2.realValue</span>
+<span class="monospaced">operator+</span> 為 <em>回傳相加值</em>
</p>
</li>
<li>
<p>
-<span class="monospaced">Value::operator|(Value v2)</span> will be <span class="monospaced">std::min(this-&gt;realValue, v2.realValue)</span>
+<span class="monospaced">operator*</span> 為 <em>回傳*this</em>
</p>
</li>
<li>
<p>
-<span class="monospaced">Value::operator*(size_t n)</span> will be <span class="monospaced">this-&gt;realValue</span>
+<span class="monospaced">operator|</span> 為 <em>回傳std::min(*this, v)</em>
</p>
</li>
</ul></div>
-<div class="paragraph"><p>If you want to maintain <strong>range sum</strong></p></div>
+</li>
+<li>
+<p>
+若要維護區間最總和, 即每次都是詢問範圍 <span class="monospaced">[a, b]</span> 的總和, 則可以定義
+</p>
<div class="ulist"><ul>
<li>
<p>
-<span class="monospaced">Value::operator+(Value v2)</span> will be <span class="monospaced">this-&gt;realValue + v2.realValue</span>
+<span class="monospaced">operator+</span> 為 <em>回傳相加值</em>
</p>
</li>
<li>
<p>
-<span class="monospaced">Value::operator|(Value v2)</span> will be <span class="monospaced">this-&gt;realValue + v2.realValue)</span>
+<span class="monospaced">operator*</span> 為 <em>回傳(*this) * n</em>
</p>
</li>
<li>
<p>
-<span class="monospaced">Value::operator*(size_t n)</span> will be <span class="monospaced">this-&gt;realValue * n</span>
+<span class="monospaced">operator|</span> 為 <em>回傳相加值</em>
</p>
</li>
</ul></div>
-<div class="ulist"><div class="title">Support methods</div><ul>
+</li>
+</ul></div>
+</div>
+<div class="sect3">
+<h4 id="_support_methods_5">Support Methods</h4>
+<div class="ulist"><ul>
<li>
<p>
-N &#8592; array size
+N &#8592; <span class="monospaced">this</span> 所維護的陣列長度
</p>
</li>
</ul></div>
@@ -1783,60 +2067,64 @@ N &#8592; array size
style="
width:100%;
">
+<col style="width:2%;">
<col style="width:5%;">
-<col style="width:5%;">
-<col style="width:17%;">
-<col style="width:5%;">
-<col style="width:5%;">
-<col style="width:58%;">
+<col style="width:19%;">
+<col style="width:8%;">
+<col style="width:8%;">
+<col style="width:55%;">
<thead>
<tr>
<th class="tableblock halign-right valign-top" >Const?</th>
-<th class="tableblock halign-left valign-top" >Name</th>
-<th class="tableblock halign-left valign-top" > Parameters</th>
-<th class="tableblock halign-left valign-top" > Return Type</th>
-<th class="tableblock halign-left valign-top" > Time Complexity</th>
+<th class="tableblock halign-right valign-top" >Name </th>
+<th class="tableblock halign-left valign-top" > Parameters </th>
+<th class="tableblock halign-left valign-top" > Return_Type</th>
+<th class="tableblock halign-center valign-top" > Time_Complexity</th>
<th class="tableblock halign-left valign-top" > Description</th>
</tr>
</thead>
<tbody>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>reset</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(size_t N)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>reset</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(size_t <span class="monospaced">size</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">O(1)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Clear and reset the array size to N (from <span class="monospaced">0</span> to <span class="monospaced">N - 1</span>)</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(1)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">將資料清空且設定維護範圍是 <span class="monospaced">0~size - 1</span> 其中時間複雜度確切多少未知
+要看 <span class="monospaced">std::vector::resize()</span> 的效率</p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock">const</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>query</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(ssize_t <em>first, ssize_t </em>last)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>query</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(ssize_t <span class="monospaced">first</span>,<br>
+ssize_t <span class="monospaced">last</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">Value</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">O(logN)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Range query</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">回傳區間 <span class="monospaced">[first,last]</span> (邊界都含) 的區間值</p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>override</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(ssize_t <em>first, ssize_t </em>last, Value const&amp; __value)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>override</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(ssize_t <span class="monospaced">first</span>,<br>
+ssize_t <span class="monospaced">last</span>,<br>
+Value const&amp; <span class="monospaced">value</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">O(logN)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Let the element in the array index from <span class="monospaced">__first</span> to <span class="monospaced">__last</span>
-be <span class="monospaced">__value</span></p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">將區間 <span class="monospaced">[first,last]</span> 全部都設定成 <span class="monospaced">value</span></p></td>
</tr>
<tr>
-<td class="tableblock halign-right valign-top" ><p class="tableblock"></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>offset</strong></p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">(ssize_t <em>first, ssize_t </em>last, Value const&amp; __value)</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>offset</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(ssize_t <span class="monospaced">first</span>,<br>
+ssize_t <span class="monospaced">last</span>,<br>
+Value const&amp; <span class="monospaced">delta</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">O(logN)</p></td>
-<td class="tableblock halign-left valign-top" ><p class="tableblock">Let the element in the array index from <span class="monospaced">__first</span> to <span class="monospaced">__last</span>
-plus <span class="monospaced">__value</span></p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">將區間 <span class="monospaced">[first,last]</span> 全部都加上 <span class="monospaced">delta</span></p></td>
</tr>
</tbody>
</table>
-<hr>
+</div>
</div>
</div>
</div>
@@ -1844,7 +2132,7 @@ plus <span class="monospaced">__value</span></p></td>
<div id="footnotes"><hr></div>
<div id="footer">
<div id="footer-text">
-Last updated 2014-04-21 14:11:29 CST
+Last updated 2014-04-22 02:21:30 CST
</div>
</div>
</body>