洛谷 P3391 【模板】文藝平衡樹

題目背景

這是一道經典的Splay模板題——文藝平衡樹。

題目描述

您需要寫一種數據結構,來維護一個有序數列,其中需要提供以下操作:翻轉一個區間,例如原有序序列是5 4 3 2 1,翻轉區間是[2,4]的話,結果是5 2 3 4 1

輸入輸出格式

輸入格式:

?

第一行為n,m(n,m<=100000) n表示初始序列有n個數,這個序列依次是(1,2, \cdots n-1,n)(1,2,?n?1,n)?m表示翻轉操作次數

接下來m行每行兩個數?[l,r][l,r]?數據保證?1 \leq l \leq r \leq n1lrn

?

輸出格式:

?

輸出一行n個數字,表示原始序列經過m次變換后的結果

輸入輸出樣例

輸入樣例
5 3
1 3
1 3
1 4
輸出樣例
4 3 2 1 5


splay模板題,維護該序列的中序遍歷不變,然后每次通過旋轉節點使操作的區間變作一顆字樹,然后打上標記即可。
什么是splay?
一棵伸展樹......
什么是伸展樹?
最近剛學,我個人的理解,大概就是一個能在不破壞二叉搜索樹結構(即中序遍歷始終為升序)的情況下
通過旋轉一個節點到他根節點位置使得操作區間恰好全部位于一棵子樹內的方法。


然后就打上標記,之后在類似線段樹一樣的pushdown傳遞信息就好了。

代碼如下:
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define mod
#define mid (R+L>>1)
#define M 2000010
using namespace std;
LL read(){LL nm=0,oe=1;char cw=getchar();while(!isdigit(cw)) oe=cw=='-'?-oe:oe,cw=getchar();while(isdigit(cw)) nm=nm*10+(cw-'0'),cw=getchar();return nm*oe;
}
LL n,m,l[M],r[M],tp[M],ad,sz[M],tg[M],ace,a,b,p,q,cnt;
bool flag=false;
void pushdown(LL x){if(tg[x]==0) return;tg[x]=0,swap(l[x],r[x]);tg[l[x]]^=1,tg[r[x]]^=1;
}
void pushup(LL x){sz[x]=sz[l[x]]+sz[r[x]]+1;}
LL build(LL L,LL R,LL rt){if(L>R) return 0;tp[mid]=rt,sz[mid]=1;if(L==R) return L;l[mid]=build(L,mid-1,mid);r[mid]=build(mid+1,R,mid);sz[mid]+=sz[l[mid]]+sz[r[mid]];return mid;
}
void rotate(LL x){if(ace==x) return;LL top=tp[x];pushdown(top),pushdown(x);if(top==ace) ace=x,tp[x]=n+1,tp[top]=x;else{if(l[tp[top]]==top) l[tp[top]]=x;else r[tp[top]]=x;tp[x]=tp[top],tp[top]=x;}if(l[top]==x) l[top]=r[x],tp[r[x]]=top,r[x]=top;else r[top]=l[x],tp[l[x]]=top,l[x]=top;pushup(top),pushup(x);
}
void oper(LL x){if(x==ace||tp[x]==ace){return;}LL top=tp[x];pushdown(top);if(tp[top]==ace) rotate(x);else if(l[l[tp[top]]]==x||r[r[tp[top]]]==x) rotate(top);else rotate(x);
}
LL find(LL x,LL pos){pushdown(x);if(sz[l[x]]==pos-1) return x;if(sz[l[x]]<pos-1) return find(r[x],pos-sz[l[x]]-1);else return find(l[x],pos);
}
void ans(LL x){if(x==0) return;pushdown(x);ans(l[x]);if(x<n&&x>1){if(flag) printf(" ");flag=true;printf("%lld",x-1);}ans(r[x]);
}
int main(){n=read()+2,m=read(),ace=build(1,n,n+1);while(m--){a=read(),b=read();p=find(ace,a),q=find(ace,b+2);while(tp[q]!=ace&&q!=ace) oper(q);if(q!=ace) rotate(q);while(tp[p]!=ace) oper(p);tg[r[p]]^=1;}ans(ace);return 0;
}
 

我這里還是寫的比較模糊,我也是通過了解別人的博客才理解了splay

就是這個 ->?http://blog.csdn.net/skydec/article/details/20151805

轉載于:https://www.cnblogs.com/OYJason/p/7887057.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252845.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252845.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252845.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CCD/CMOS靶面尺寸型號標準

傳感器尺寸指的是感光器對角線尺寸&#xff0c;1/1.7英寸&#xff08;14.8毫米&#xff0d;&#xff0d;導向管尺寸&#xff09;大于1/2.3英寸&#xff08;10.95毫米&#xff0d;&#xff0d;&#xff0d;導向管尺寸&#xff09;.采用同種技術水平的感光器&#xff0c;肯定是單…

分布式學習基礎知識

網絡通訊&#xff0c;網絡是分布式的基礎&#xff0c;對分布式的理解建立在對網絡的理解上&#xff0c;包括&#xff1a; OSI模型的7層TCP/IP&#xff0c;DNS&#xff0c;NATHTTP&#xff0c;SPDY/HTTP2Telnet網絡編程&#xff0c;是通過程序在多個主機之間通信。包括&#xff…

django中FastDFS客戶端與自定義文件存儲系統

什么是FastDFSFastDFS 是用 c 語言編寫的一款開源的分布式文件系統。FastDFS 為互聯網量身定制&#xff0c; 充分考慮了冗余備份、負載均衡、線性擴容等機制&#xff0c;并注重高可用、高性能等指標&#xff0c;使用 FastDFS 很容易搭建一套高性能的文件服務器集群提供文件上傳…

新近碰到的病毒(TR.Spy.Babonock.A)

先來段Microsoft的說明&#xff1a; Worm:Win32/Babonock.A Alert level: Severe Detected with Windows Defender Antivirus Also detected as:Worm/Win32.AutoIt (AhnLab)Trojan-Spy.Win32.AutoIt.p (Kaspersky)Worm/Autoit.ANVE (AVG)TR/Spy.Babonock.A (Avira)Win32/Autoit…

鏡頭基本參數

非常好的文章 &#xff0c;下載不了&#xff0c;但是會經常閱讀。 https://wenku.baidu.com/view/47a7deddee06eff9aff8074e.html?rec_flagdefault&sxts1529650964474

Linux課程筆記 Day09 課上內容總結 MySql,Php的安裝及Apache,Nginx,Php的優化

一 MySql 1.1 如何選擇MySql的版本 1.2 MySql單實例安裝 &#xff08;1&#xff09; 建立mysql用戶 首先以root身份登陸到linux系統&#xff0c;然后執行如下命令創建mysql用戶及用戶組 [roottest3 ~]# groupadd mysql [roottest3 ~]# useradd -s /sbin/nologin -g …

jenkins 通過自動拉取Gitlab上的代碼實現自動更新NGINX

所需要用到的環境&#xff1a; Gitlab&#xff1a; 172.20.7.70Jenkins&#xff1a; 172.20.7.71nginx&#xff1a; 172.20.7.72 gitlab 和Jenkins安裝自行百度 開始實驗操作 首先通過網頁訪問nginx&#xff0c;nginx默認測試頁我是改了的 &#xff0c;所以看到的不是它原…

Kylin工作原理、體系架構

核心思想&#xff1a;預計算。 對多維分析可能用到的度量進行預計算&#xff0c;將計算好的結果保存成Cube&#xff0c;并存在HBase中&#xff0c;供查詢時直接訪問 將高復雜度的聚合運算、多表連接……操作轉換成對預計算結果的查詢。決定了Kylin擁有很好的快速查詢、高并發能…

工業相機圖像傳感器的靶面大小

在機器視覺中&#xff0c;工業相機是一種比較重要的配件。而在 工業相機中&#xff0c;圖像傳感器又是最最關鍵核心的東西。而圖像傳感器的靶面的大小&#xff0c;往往直接關系到成像的質量。通常來講&#xff0c;圖像的成像質量與像素的大小成正比。這也就意味著&#xff0c;同…

SpringMVC+Mybatis學習

簡單Web項目搭建&#xff1a; 一.流程 1. 導包 n個springMVC&#xff1b; 2個mybatis<其中一個是mybatis-spring>&#xff1b; 3個jackson包&#xff1b; 2. xml配置 web.xml和applicationContext.xml 3. 建包&#xff0c;建接口&#xff0c;建類 4. 建jsp 二&#xff1a…

PPT怎么在線轉視頻?

PPT在線轉視頻的方法有哪些&#xff1f;在PPT中有些播放上的問題還是可以進行文件的轉換&#xff0c;下面就給大家簡單的介紹一下方法。步驟一&#xff1a;PPT轉視頻的直接方法是進入迅捷PDF在線轉換器網站中&#xff0c;點擊導航欄中的視頻音頻轉換中的PPT轉視頻&#xff1b; …

At least one JPA metamodel must be present!

使用spring jpa是一直報這個錯&#xff0c;找了兩天網上沒有找到答案&#xff0c;最后發現時配置配錯了&#xff0c;如下&#xff1a; <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa<…

夜貓子”必需的!——融合夜視技術

融合夜視技術是一項正在發展中的前沿技術&#xff0c;通過將多個工作在不同波段的夜視傳感器獲得的圖像經過處理後生成高質量的融合圖像&#xff0c;融合圖像的分辨率更高&#xff0c;能夠揭示出那些很難被看到的特徵。按照融合的方式&#xff0c;融合夜視技術可以分為數字融合…

Vue中登錄模塊

轉載于:https://www.cnblogs.com/DZzzz/p/8921783.html

unity 中的UGUI 屏蔽鼠標穿透

void Update() { if(IsTouchedUI()) { Debug.Log("當前觸摸在UI上"); } else { Debug.Log("當前沒有觸摸在UI上"); } } void OnMouseDown() { if(IsTouchedUI()) { Debug.Log("當前觸摸在UI上"); } else { Debug.Log(&qu…

深度解析紅外探測器

輻射/設計/技術之前我們跟大家解析了紅外探測器的相關性能參數。 對于紅外探測器的工作原理你了解多少呢&#xff1f;今天小編再繼續上次的講解&#xff0c;為大家解析非制冷紅外焦平面探測器技術原理 及機芯介紹。 非制冷紅外技術原理 非制冷紅外探測器利用紅外輻射的熱效應&a…

js基礎總結性能優化

一.加載和執行1.推薦所有的script標簽盡可能放到body標簽的底部&#xff0c;以盡量減少對整體頁面下載速度的影響。2.組織腳本減少頁面包含的scirpt標簽數量&#xff0c;可以把多個文件合并成一個。3.無阻塞腳本1&#xff09;.延遲腳本defer:html解析完才加載&#xff0c;執行順…

Python2 Python3 爬取趕集網租房信息,帶源碼分析

*之前偶然看了某個騰訊公開課的視頻,寫的爬取趕集網的租房信息,這幾天突然想起來,于是自己分析了一下趕集網的信息,然后自己寫了一遍,寫完又用用Python3重寫了一遍.之中也遇見了少許的坑.記一下.算是一個總結.*python2 爬取趕集網租房信息與網站分析 分析目標網站url尋找目標標…

紅外熱成像技術原理

目前&#xff0c;新的熱成像儀主要采用非致冷焦平面陣列技術&#xff0c;集成數萬個乃至數十萬個信號放大器&#xff0c;將芯片置于光學系統的焦平面上&#xff0c;無須光機掃描系統而取得目標的全景圖像&#xff0c;從而大大提高了靈敏度和熱分辨率&#xff0c;并進一步地提高…

網站中公用頭部與尾部

一、html 1. <iframe src"1.html" frameborder"0"></iframe> 2. <embed src"1.html"/> 二、寫公用的js 文件&#xff0c;js中寫字divde符串&#xff0c;然后在需要的頁面適當位置引入公用的js. 三、ajax動態拉取填充 四、后端…