文艺平衡树
From admin
背景 Background
此为平衡树系列第二道:文艺平衡树
描述 Description
您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:
翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1
输入格式 InputFormat
第一行为n,m n表示初始序列有n个数,这个序列依次是(1,2……n-1,n)  m表示翻转操作次数
接下来m行每行两个数[l,r] 数据保证 1<=l<=r<=n
 
输出格式 OutputFormat
输出一行n个数字,表示原始序列经过m次变换后的结果
 
样例输入 SampleInput [复制数据]

5 3
1 3
1 3
1 4

样例输出 SampleOutput [复制数据]
 
4 3 2 1 5 
 
数据范围和注释 Hint
n,m<=100000 
题解:
终于A了这道题,好激动。。。
也终于找到了一个好的splay模版
向序列之神--splay进发!
代码:
 const maxn=+;
var s,id,fa:array[..maxn] of longint;
rev:array[..maxn] of boolean;
c:array[..maxn,..] of longint;
i,n,m,rt,x,y:longint;
procedure swap(var x,y:longint);
var t:longint;
begin
t:=x;x:=y;y:=t;
end; procedure pushup(x:longint);
begin
s[x]:=s[c[x,]]+s[c[x,]]+;
end;
procedure pushdown(x:longint);
var l,r:longint;
begin
l:=c[x,];r:=c[x,];
if rev[x] then
begin
swap(c[x,],c[x,]);
rev[l]:=not(rev[l]);
rev[r]:=not(rev[r]);
rev[x]:=false;
end;
end;
procedure rotate(x:longint;var k:Longint);
var l,r,y,z:longint;
begin
y:=fa[x];z:=fa[y];
if c[y,]=x then l:= else l:=;r:=l xor ;
if y=k then k:=x else c[z,ord(c[z,]=y)]:=x;
fa[x]:=z;fa[y]:=x;fa[c[x,r]]:=y;
c[y,l]:=c[x,r];c[x,r]:=y;
pushup(y);pushup(x);
end;
procedure splay(x:longint;var k:longint);
var y,z:longint;
begin
while x<>k do
begin
y:=fa[x];z:=fa[y];
if y<>k then
begin
if (c[z,]=y) xor (c[y,]=x) then rotate(x,k)
else rotate(y,k);
end;
rotate(x,k);
end;
end;
function find(x,rank:longint):longint;
var l,r:longint;
begin
pushdown(x);l:=c[x,];r:=c[x,];
if s[l]+=rank then exit(x)
else if s[l]>=rank then exit(find(l,rank))
else exit(find(r,rank-s[l]-));
end;
procedure rever(l,r:longint);
var x,y:longint;
begin
x:=find(rt,l);y:=find(rt,r+);
splay(x,rt);splay(y,c[x,]);
rev[c[y,]]:=not(rev[c[y,]]);
end;
procedure build(l,r,f:longint);
var mid,now,last:longint;
begin
if l>r then exit;
now:=id[l];last:=id[f];
if l=r then
begin
fa[now]:=last;s[now]:=;
c[last,ord(l>f)]:=now;
exit;
end;
mid:=(l+r)>>;
build(l,mid-,mid);build(mid+,r,mid);
now:=id[mid];pushup(mid);
fa[now]:=last;
c[last,ord(mid>f)]:=now;
end;
procedure init;
begin
readln(n,m);
for i:= to n+ do id[i]:=i;
build(,n+,);rt:=(n+)>>;
end;
procedure main;
begin
for i:= to m do
begin
readln(x,y);
rever(x,y);
end;
for i:= to n+ do write(find(rt,i)-,' ');
end;
begin
assign(input,'input.txt');assign(output,'output.txt');
reset(input);rewrite(output);
init;
main;
close(input);close(output);
end.

tyvj 1729 文艺平衡树的更多相关文章

  1. [BZOJ3223]Tyvj 1729 文艺平衡树

    [BZOJ3223]Tyvj 1729 文艺平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区 ...

  2. BZOJ3223: Tyvj 1729 文艺平衡树 [splay]

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3595  Solved: 2029[Submit][Sta ...

  3. BZOJ 3223: Tyvj 1729 文艺平衡树

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3628  Solved: 2052[Submit][Sta ...

  4. bzoj3223 Tyvj 1729 文艺平衡树(Splay Tree+区间翻转)

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2202  Solved: 1226[Submit][Sta ...

  5. BZOJ 3223: Tyvj 1729 文艺平衡树(splay)

    速度居然进前十了...第八... splay, 区间翻转,用一个类似线段树的lazy标记表示是否翻转 ------------------------------------------------- ...

  6. 3223: Tyvj 1729 文艺平衡树

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1347  Solved: 724[Submit][Stat ...

  7. bzoj 3223: Tyvj 1729 文艺平衡树 (splay)

    链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3223 题面: 3223: Tyvj 1729 文艺平衡树 Time Limit: 10 S ...

  8. BZOJ 3223: Tyvj 1729 文艺平衡树-Splay树(区间翻转)模板题

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 6881  Solved: 4213[Submit][Sta ...

  9. fhq_treap || BZOJ 3223: Tyvj 1729 文艺平衡树 || Luogu P3391 【模板】文艺平衡树(Splay)

    题面: [模板]文艺平衡树(Splay) 题解:无 代码: #include<cstdio> #include<cstring> #include<iostream> ...

随机推荐

  1. php header示例代码(推荐)

    <?php /*** Function: PHP header() examples (PHP) ** Desc: Some examples on how to use the header( ...

  2. python 自动化之路 day 05

    内容目录: 列表生成式.迭代器&生成器 装饰器 软件目录结构规范 模块初始 常用模块 1.列表生成式,迭代器&生成器 列表生成式 需求:列表[0, 1, 2, 3, 4, 5, 6, ...

  3. Linux 网络I/O模型

    前言 本文是笔者的第一篇博文,在这篇文章的大部分内容基于steven大神的<Unix Network Programming>.一来是对书本内容的整理与归纳.二来也是为接下来的博文奠定基础 ...

  4. jQuery Ajax无刷新操作

    下面是“无刷新登录”的例子,采用Ashx+jQuery Ajax实现. //后台实例代码 ashx文件(可替换为从数据库中读取) public void ProcessRequest(HttpCont ...

  5. display:block; 块级元素。<a>,<span>标签设置宽度和高度

    display:block;是让对象成为块级元素(比如a,span等) 转化后 可以对a或者span标签进行width和height设置,否则设置不了 display有很多对象,具体可以参考http: ...

  6. DB2实用命令记录

    quiesce tablespace quiesce tablespaces for table <table_name> share; Monitor Switches details ...

  7. ASP.NET MVC Razor视图(2)

    昨天介绍了一些Razor的基本语法,几天接着向下说: 补成一个,上次介绍了怎么输出原样的文本,用<text></text>标签,下面再介绍一种语法: @{@:我爱北京}  这个 ...

  8. IDEA的使用

    1.设置字体file->setting->color$fonts->font 保存提示设置file->Settings -> Editor -> General - ...

  9. Matlab 文件命名规则

    Matlab 文件命名规则 1.文件名命名要用英文字符,第一个字符不能是数字和下划线. 2.文件名不要取为matlab的一个固有函数,m文件名的命名尽量不要是简单的英文单词,最好是由大小写英文.数字. ...

  10. 388A Fox and Box Accumulation

    一开始贪心策略想错了! #include<cstdio> #include<algorithm> using namespace std; ]; int main() { in ...