当前位置: 首页 > news >正文

【代码】洛谷P3391 【模板】文艺平衡树(FHQ Treap)

前置知识:

懂 FHQ Treap 模板

仙人指路

解析:

其实没啥难度,直接看代码,该写的都写在注释里了。

//看到这种不是每次操作完都要输出的,都知道是老套路——懒标记
#include<bits/stdc++.h>
using namespace std;#define lc(p) tr[p].ls
#define rc(p) tr[p].rsconst int N = 1e5 + 10;struct node {int ls, rs;int val;int siz;int rev;  //懒标记,为 0 的时候不用反转,反之要 int rnd;
} tr[N];
int rt, trlen;int newd(int v) {trlen++;tr[trlen] = {0, 0, v, 1, 0, rand()};return trlen;
}void pushup(int p) {tr[p].siz = tr[lc(p)].siz + tr[rc(p)].siz + 1;
}void pushdown(int p) {  //往下懒标记 if (!tr[p].rev) {return ;}swap(lc(p), rc(p));tr[lc(p)].rev ^= 1;tr[rc(p)].rev ^= 1;tr[p].rev = 0;
}//肯定不能按值分割,寻思按位分割
void split(int p, int k, int &x, int &y) {if (p == 0) {x = y = 0;return ;}pushdown(p);if (k > tr[lc(p)].siz) {x = p;split(rc(p), k - tr[lc(p)].siz - 1, rc(x), y);}else {y = p;split(lc(p), k, x, lc(y));}pushup(p);
}int merge(int x, int y) {if ( (!x) || (!y) ) {return x + y;}if (tr[x].rnd < tr[y].rnd) {pushdown(x);  //先放懒标记 rc(x) = merge(rc(x), y);pushup(x);return x;}else {pushdown(y);lc(y) = merge(x, lc(y));pushup(y);return y;}
}void Reverse(int l, int r) {int x, y, z;split(rt, l - 1, x, y);split(y, r - l + 1, y, z);tr[y].rev ^= 1;rt = merge( x, merge(y, z) );
}void dfs(int p) {if (!p) {return ;}pushdown(p);dfs(lc(p));cout << tr[p].val << " ";dfs(rc(p));
}int main() {ios::sync_with_stdio(false);cin.tie(0);int n, m;cin >> n >> m;rt = trlen = 0;for (int i = 1; i <= n; i++) {rt = merge(rt, newd(i));}for (int i = 1; i <= m; i++) {int l, r;cin >> l >> r;Reverse(l, r);}dfs(rt);  //输出之前整体放一遍懒标记 cout << "\n";return 0;
}

http://www.dtcms.com/a/350597.html

相关文章:

  • 低质量视频变高清AI:告别模糊,重现清晰画质
  • chrome插件开发(二)
  • vue家教预约平台设计与实现(代码+数据库+LW)
  • 驱动-热插拔-Netlink广播监听内核状态
  • HarmonyOS实战(DevEco AI篇)—CodeGenie + DeepSeek构建鸿蒙开发的超级外挂工作流
  • rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十九)子窗口
  • 您的连接不是私密连接问题解决
  • 借Copilot之力,实现办公效率的跃升
  • 数据库原理及应用_数据库基础_第2章关系数据库标准语言SQL_索引和视图
  • 软件使用教程(二):VS Code的Copilot、Git设置与使用
  • 复制和下载飞书文档的方法教程
  • Unity开发如何实现换装技术
  • Ubuntu 14.10 i386桌面版安装教程(U盘启动详细步骤-附安装包下载)​
  • LeetCode 100题(3)(10题)
  • 实用电脑小工具分享,守护电脑隐私与提升效率21/64
  • CANopen - DCF(Device Configuration File) 介绍
  • 平安产险青海分公司助力国家电投黄河公司安全生产
  • 2024鸿蒙样题需要掌握的知识点
  • Shopify 集合页实现自定义广告位插入(支持分页)
  • C++ 指针与引用面试深度解析
  • k8s数据存储
  • PMP项目管理知识点-④ 项⽬整合管理
  • 3-2.Python 函数 - None(None 概述、None 应用场景)
  • Flink的CheckPoint与SavePoint
  • 使用 Prometheus 监控服务器节点:Node Exporter 详解与配置
  • 【2025】政策变动
  • 从认识Docker到安装
  • 深分页实战
  • 服务注册信息丢失ERROR 2003 (HY000):Can‘t connect to MySQL server on ‘localhost’(10061)
  • 数据结构青铜到王者第三话---ArrayList与顺序表(1)