02-隐式Treap-01-三段分裂.svg 1.6 KB

12345678
  1. <svg xmlns="http://www.w3.org/2000/svg" width="940" height="300" viewBox="0 0 940 300">
  2. <style>.t{font:16px sans-serif;fill:#1f2937}.s{font:13px sans-serif;fill:#475569}.seg{fill:#fff;stroke:#2563eb;stroke-width:3}.mid{fill:#fef3c7;stroke:#d97706;stroke-width:4}.a{stroke:#16a34a;stroke-width:4;fill:none}</style>
  3. <rect width="940" height="300" fill="#f8fafc"/><text x="32" y="34" class="t" font-weight="bold">隐式 FHQ:按排名 split 两次,把 [l,r] 单独拿成 mid 根</text>
  4. <g transform="translate(50 95)"><rect x="0" y="0" width="450" height="58" rx="10" class="seg"/><line x1="130" y1="0" x2="130" y2="58" stroke="#2563eb" stroke-width="3"/><line x1="330" y1="0" x2="330" y2="58" stroke="#d97706" stroke-width="4"/><text x="65" y="35" class="t" text-anchor="middle">前缀 1..l-1</text><text x="230" y="35" class="t" text-anchor="middle">目标 l..r</text><text x="390" y="35" class="t" text-anchor="middle">后缀</text></g>
  5. <path d="M510 125 H620" class="a"/><path d="M620 125 l-14 -8 v16z" fill="#16a34a"/><text x="520" y="98" class="s">split(root,r),再 split(左,l-1)</text>
  6. <g transform="translate(650 75)"><rect x="0" y="0" width="80" height="55" rx="8" class="seg"/><rect x="95" y="0" width="80" height="55" rx="8" class="mid"/><rect x="190" y="0" width="80" height="55" rx="8" class="seg"/><g class="t" text-anchor="middle"><text x="40" y="33">left</text><text x="135" y="33">mid</text><text x="230" y="33">right</text></g></g>
  7. <text x="57" y="235" class="s">改变区间内容:只操作 mid;再 merge(left, merge(mid,right)),每段内部中序不变。</text>
  8. </svg>