P3391 【模板】文艺平衡树(@无旋Treap,* *)

【模板】文艺平衡树 - 洛谷

题目描述

您需要写一种数据结构(可参考题目标题),来维护一个有序数列。

其中需要提供以下操作:翻转一个区间,例如原有序序列是 5 4 3 2 1,翻转区间是 [2,4] 的话,结果是 5 2 3 4 1

输入格式

第一行两个正整数 𝑛,𝑚n,m,表示序列长度与操作个数。序列中第 𝑖i 项初始为 𝑖i。
接下来 𝑚m 行,每行两个正整数 𝑙,𝑟l,r,表示翻转的区间。

输出格式

输出一行 𝑛n 个正整数,表示原始序列经过 𝑚m 次变换后的结果。

输入输出样例

输入 #1复制

5 3
1 3
1 3
1 4

输出 #1复制

4 3 2 1 5

说明/提示

【数据范围】
对于 100% 的数据,1≤𝑛,𝑚≤100000,1≤𝑙≤𝑟≤𝑛。

解析: 

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<math.h>
#include<map>
#include<sstream>
#include<deque>
#include<unordered_map>
#include<unordered_set>
#include<bitset>
#include<stdio.h>
using namespace std;
typedef long long LL;
//#define int LL
typedef unsigned long long ULL;
typedef pair<long long, long long> PLL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
const int inf = 0x3f3f3f3f;
const int INF = 0x3f3f3f3f3f3f3f3f;
const LL Mod = 998244353;
const int N = 1e7 + 10, M = 1 << 15;
int n, m;
int rt;
struct Treap {int son[N][2], s[N],w[N],pro[N];int idx;bool fl[N];int build(int x) {w[++idx] = x, s[idx] = 1, pro[idx] = rand();return idx;}void up(int u) {s[u] = s[son[u][1]] + s[son[u][0]] + 1;}void pushdown(int u) {swap(son[u][1], son[u][0]);int l = son[u][0], r = son[u][1];if (l)fl[l] ^= 1;if (r)fl[r] ^= 1;fl[u] = 0;}int merge(int l, int r) {if (!l || !r) {return l + r;}if (pro[l] < pro[r]) {if (fl[l])pushdown(l);son[l][1] = merge(son[l][1], r);up(l);return l;}if (fl[r])pushdown(r);son[r][0] = merge(l, son[r][0]);up(r);return r;}void split(int u,int k,int &l,int&r) {if (!u) {l = r = 0;return;}if (fl[u])pushdown(u);int &lch = son[u][0],& rch = son[u][1];if (k > s[lch]) {l = u;split(rch, k - s[lch] - 1, rch, r);}else {r = u;split(lch, k, l, lch);}up(u);}void coutt(int u) {if (!u)return;if (fl[u])pushdown(u);coutt(son[u][0]);printf("%d ", w[u]);coutt(son[u][1]);}
}tr;signed main() {cin >> n >> m;for (int i = 1; i <= n; i++) {rt=tr.merge(rt, tr.build(i));}while (m--) {int l, r, a, b, c;scanf("%d%d", &l, &r);tr.split(rt, l - 1, a, b);tr.split(b, r-l+1, b, c);tr.fl[b] ^= 1;rt=tr.merge(a, b);rt = tr.merge(rt, c);}tr.coutt(rt);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/29062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HCS-华为云Stack-容器网络

HCS-华为云Stack-容器网络 容器隧道overlay VPC网络

第〇篇:深入Docker的世界系列博客介绍

深入Docker的世界系列博客介绍 欢迎来到“深入Docker的世界”系列博客&#xff0c;这是一次旨在全面探索Docker容器化技术的冒险之旅。从基础原理到高级应用&#xff0c;再到实践案例分析&#xff0c;我们将深入挖掘Docker的每一个角落&#xff0c;帮助你不仅掌握这项技术的实…

Mariadb/MySQL挂了且重启失败

今天发现线上服务挂了&#xff0c;排查发现是MySQL服务停了且重启失败&#xff0c;排查日志&#xff1a; 1&#xff09;vim /var/log/mariadb/mariadb.log发现出现了Out of memory 240617 17:02:17 mysqld_safe mysqld from pid file /var/run/mariadb/mariadb.pid ended 240…

FreeRtos-09事件组的使用

1. 事件组的理论讲解 事件组:就是通过一个整数的bit位来代表一个事件,几个事件的or和and的结果是输出 #define configUSE_16_BIT_TICKS 0 //configUSE_16_BIT_TICKS用1表示16位,用0表示32位 1.1 事件组适用于哪些场景 某个事件若干个事件中的某个事件若干个事件中的所有事…

第10章 文件和异常

第10章 文件和异常 10.1 从文件中读取数据10.1.1 读取整个文件10.1.2 文件路径10.1.3 逐行读取10.1.4 创建一个包含文件各行内容的列表10.1.5 使用文件的内容10.1.6 包含一百万位的大型文件10.1.7 圆周率值中包含你的生日吗 10.2 写入文件10.2.1 写入文件10.2.2 写入多行10.2.3…

matplotlib`进行绘图时

当使用matplotlib进行绘图时&#xff0c;如果中文显示失败&#xff0c;通常是因为字体设置的问题。matplotlib默认使用的字体可能不包含中文字符集。为了解决这个问题&#xff0c;你可以尝试以下几个步骤&#xff1a; 设置字体属性&#xff1a; 在绘图代码中&#xff0c;你可以…

MyBatisPlus基础学习

一、简介 二、集成MP 三、入门HelloWorld 四、条件构造器EntityWrapper 五、ActiveRecord(活动记录 ) 六、代码生成器 七、插件扩展 八、自定义全局操作 九、公共字段自动填充 十、Oracle主键Sequence 十一、Idea快速开发插件 十二、mybatis-plus实践及架构原理

C#聊天室客户端完整③

窗体 进入聊天室界面(panel里面,label,textbox,button): 聊天界面(flowLayoutPanel(聊天面板))&#xff1a; 文档大纲(panel设置顶层(登录界面),聊天界面在底层) 步骤&#xff1a;设置进入聊天室→输入聊天→右边自己发送的消息→左边别人发的消息 MyClient.cs(进入聊天室类) …

JS 严格模式和正常模式的区别

严格模式使用"use strict"; 作用&#xff1a; 消除 Javascript 语法的一些不合理、不严谨之处&#xff0c;减少一些怪异行为;消除代码运行的一些不安全之处&#xff0c;保证代码运行的安全&#xff1b;提高编译器效率&#xff0c;增加运行速度&#xff1b;为未来新…

如何利用TikTok矩阵源码实现自动定时发布和高效多账号管理

在如今社交媒体的盛行下&#xff0c;TikTok已成为全球范围内最受欢迎的短视频平台之一。对于那些希望提高效率的内容创作者而言&#xff0c;手动发布和管理多个TikTok账号可能会是一项繁琐且耗时的任务。幸运的是&#xff0c;通过利用TikTok矩阵源码&#xff0c;我们可以实现自…

Linux C语言:字符串处理函数

一、字符串函数 1、C库中实现了很多字符串处理函数 #include <string.h> ① 求字符串长度的函数strlen② 字符串拷贝函数strcpy③ 字符串连接函数strcat④ 字符串比较函数strcmp 2、字符串长度函数strlen 格式&#xff1a;strlen(字符数组)功能&#xff1a;计算字符串…

【Python】已解决报错:AttributeError: module ‘json‘ has no attribute ‘loads‘解决办法

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

1)Java项目笔记搭建系统梳理相关知识

目录 前言项目结构Java部分Spring整合部分SpringBoot整合部分 模块说明规划 小结javarabbitmqmybatisspring最后推荐几本工具书 前言 工作有年头了&#xff0c;学到了很多技术&#xff0c;收获了很多。但是对与工作相关的专业技能知识的掌握杂而乱&#xff0c;不够全面系统。因…

Web应用安全测试-综合利用(一)

Web应用安全测试-综合利用&#xff08;一&#xff09; 文章目录 Web应用安全测试-综合利用&#xff08;一&#xff09;1.跨站脚本攻击&#xff08;XSS&#xff09;漏洞描述测试方法GET方式跨站脚本Post方式跨站脚本 风险分析风险等级修复方案总体修复方式对于java进行的web业务…

21.FuturePromise

在异步处理时,经常用到两个接口Future 和 Promise。 说明:Netty中的Future与jdk中的Future同名,但是是两个接口,netty的Future继承了jdk的Future,而Promise又对Netty的Future进行了扩展。 JDK的Future只能同步等待任务结束(成功、失败)才能得到结果。FutureTask.get()方…

ROS中使用超声波传感器(附代码)

在ROS中使用超声波传感器通常涉及到订阅或发布sensor_msgs/Range类型的消息。下面是一个简单的示例&#xff0c;展示了如何使用C在ROS中编写一个超声波传感器的驱动程序。这个例子假设你有一个超声波传感器连接到了Arduino或者其他微控制器&#xff0c;并且该微控制器已经通过串…

SpringBoot三层架构

目录 一、传统方式 二、三层架构 三、代码拆分 1、dao层 2、service层 3、control层 四、运行结果 一、传统方式 上述代码存在一定的弊端&#xff0c;在进行软件设计和软件开发中提倡单一责任原则&#xff0c;使代码的可读性更强&#xff0c;复杂性更低&#xff0c;可扩展性…

QT day03

思维导图 QT设计 升级优化自己应用程序的登录界面。 要求&#xff1a; 1. qss实现 2. 需要有图层的叠加 &#xff08;QFrame&#xff09; 3. 设置纯净窗口后&#xff0c;有关闭等窗口功能。 4. 如果账号密码正确&#xff0c;则实现登录界面关闭&#xff0c;另一个应用界面…

3k star 项目 learning-cmake 点评

3k star 项目 learning-cmake 点评 Author: ChrisZZ Time: 2024.06.17 文章目录 3k star 项目 learning-cmake 点评概要hello-worldhello-world-clearhello-world-libcurlhello-moduleconfig-filehunter-simpleboost总结 概要 这次我们分析 github 上搜索 cmake 排名第三的项…

HarmonyOS(37) APP crash崩溃日志收集插件@hw-agconnect使用指南

hw-agconnect使用指南 添加配置文件配置SDK依赖初始化SDK参考资料 添加配置文件 获取agconnect-services.json文件。将“agconnect-services.json”文件拷贝到DevEco Studio项目的“AppScope/resources/rawfile”目录下。 配置SDK依赖 在“oh-package.json5”文件的“depende…