Xcraft 嵌入洛谷开源项目 Markdown*Palettes

以下是测试用例。

一级标题

二级标题

三级标题

四级标题

五级标题
六级标题

正文字体

斜体文本粗体文本粗斜体文本

分割线


删除线

无序列表

  • 第一项
  • 第二项
  • 第三项

另一种无序列表

  • 1
  • 2
  • 3

无序列表嵌套

  • 第2篇
    • 第2.1章
      • 第2.1.1节

有序列表

  1. 第一项
  2. 第二项
  3. 第三项

另一种有序列表

  1. 111

  2. 111

  3. 111

有序列表和无序列表嵌套

  1. 第一项:
    • 第一项嵌套的第一个元素
    • 第一项嵌套的第二个元素
  2. 第二项:
    • 第二项嵌套的第一个元素
    • 第二项嵌套的第二个元素

区块

> 123
>
> ### 标题
>
> 代码
>
> cpp > int main() > { > int a, b; > cin >> a >> b; > cout << a + b; > return 0; > } >

左对齐 右对齐 居中对齐
单元格 11111111 单元格 11111111 单元格 11111111
单元格 单元格 单元格

公式

$$ \mathbf{V}_1 \times \mathbf{V}_2 = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\\\ \frac{\partial X}{\partial u} & \frac{\partial Y}{\partial u} & 0 \\\\ \frac{\partial X}{\partial v} & \frac{\partial Y}{\partial v} & 0 \\ \end{vmatrix} $$

$$ 1+1= 2 \\ 1+2=3 \\ 1 + 3 = 4 \\ 123123123 $$

我们惊人地发现了一个重要的科学秘密,这对全世界人类都非常重要,这就是——$1+1=2$。

MATH51+1=2MATH6(document).ready(function () {
    alert('RUNOOB');
});
\`\`\`

长代码段

\`\`\`cpp
#include <bits/stdc++.h>
#define px2 (p << 1)
#define px2add (p << 1 | 1)
#define tp t[p]
#define tpx2 t[px2]
#define tpx2add t[px2add]
#define middle(l, r) int mid = (l + r) >> 1
using namespace std;
const int LEN = 5e4 + 5;
int n, m;
struct kkk
{
    int v, l0 = 0, r0 = 0, len = 0, pl, pr, tag = -1, maxl = 0;
} t[4 * LEN];
// v 表示当前区间最大连续 1 的长度
// l0、r0 表示左边/右边连续的 0(即空房)的个数
// pl、pr 表示区间左、右端点
// tag 为标记,0 表示区间退房,1 表示区间住房
// maxl 为当前区间最大连续 1 那一段的左端点
int debug()
{
    cout << "== debug ==\n";
    printf("  p   v  pl  pr  l0  r0  tg  ml  le\n");
    for (int i = 1; i <= /*253*/ 11; i++)
        if (t[i].len != 0)
            printf("%3d %3d %3d %3d %3d %3d %3d %3d %3d\n",
                   i, t[i].v, t[i].pl, t[i].pr, t[i].l0, t[i].r0, t[i].tag, t[i].maxl, t[i].len);
    cout << "\n";
    return 0;
}
int vs_max(int p, int vs, int left) // 比较猎奇的更新当前节点的 v 和 maxl 的实现
{
    if (tp.v < vs)
    {
        tp.v = vs;
        tp.maxl = left;
    }
    return 0;
}
int push_up(int p)
{
    tp.len = tpx2.len + tpx2add.len;
    tp.l0 = (tpx2.l0 == tpx2.len) ? tpx2.l0 + tpx2add.l0 : tpx2.l0;
    tp.r0 = (tpx2add.r0 == tpx2add.len) ? tpx2add.r0 + tpx2.r0 : tpx2add.r0;
    tp.v = 0;
    vs_max(p, tpx2add.v, tpx2add.maxl);
    vs_max(p, tpx2.r0 + tpx2add.l0, tpx2.pr - tpx2.r0 + 1);
    vs_max(p, tpx2.v, tpx2.maxl);
    return 0;
}
int build(int p, int l, int r)
{
    tp.pl = l;
    tp.pr = r;
    if (l == r)
    {
        tp.len = 1;
        tp.l0 = 1;
        tp.r0 = 1;
        tp.v = 1;
        tp.maxl = l;
    }
    else
    {
        middle(l, r);
        build(px2, l, mid);
        build(px2add, mid + 1, r);
        push_up(p);
    }
    return 0;
}
int add_tag(int p, int op)
{
    if (op == 1) // 区间住房
    {
        tp.l0 = 0;
        tp.r0 = 0;
        tp.v = 0;
        tp.tag = 1;
    }
    else // 区间退房
    {
        tp.l0 = tp.len;
        tp.r0 = tp.len;
        tp.v = tp.len;
        tp.maxl = tp.pl;
        tp.tag = 0;
    }
    return 0;
}
int push_down(int p)
{
    if (tp.tag != -1)
    {
        add_tag(px2, tp.tag);
        add_tag(px2add, tp.tag);
        tp.tag = -1;
    }
    return 0;
}
int update(int p, int l, int r, int op)
{
    if (l <= tp.pl && tp.pr <= r)
        add_tag(p, op);
    else
    {
        middle(tp.pl, tp.pr);
        push_down(p);
        if (l <= mid)
            update(px2, l, r, op);
        if (r > mid)
            update(px2add, l, r, op);
        push_up(p);
    }
    return 0;
}
int query(int p, int m)
{
    if (tp.v < m)
        return 0;
    else if (tp.pl == tp.pr)
        return tp.pl;
    push_down(p);
    if (tpx2.v >= m)
        return query(px2, m);
    else if (tpx2.r0 + tpx2add.l0 >= m)
        return tpx2.pr - tpx2.r0 + 1;
    else
        return query(px2add, m);
}
int main()
{
    // freopen("p2894.out", "w", stdout);
    // ios::sync_with_stdio(false);
    // cin.tie(0);
    cin >> n >> m;
    build(1, 1, n);
    while (m--)
    {
        int op, x, y;
        cin >> op;
        if (op == 1)
        {
            cin >> x;
            int ans = query(1, x);
            if (ans != 0)
            {
                cout << ans << "\n";
                update(1, ans, ans + x - 1, 1);
            }
            else
                cout << 0 << "\n";
        }
        else
        {
            cin >> x >> y;
            update(1, x, x + y - 1, 0);
        }
        // debug();
    }
    return 0;
}
\`\`\`


图片

![](https://cdn.luogu.com.cn/upload/image_hosting/8n4qixw0.png)