BZOJ链接 洛谷链接

题意

模板题啦~×2

代码

//文艺平衡树
#include <cstdio>
#include <algorithm>
using namespace std;
int const N=1e5+10;
int n,m;
int rt,fa[N],ch[N][2],siz[N]; bool rev[N];
int wh(int p) {return p==ch[fa[p]][1];}
void update(int p) {siz[p]=siz[ch[p][0]]+siz[ch[p][1]]+1;}
void pushdown(int p)
{
if(rev[p])
{
swap(ch[p][0],ch[p][1]);
rev[ch[p][0]]^=1; rev[ch[p][1]]^=1;
rev[p]=false;
}
}
void trPrint()
{
for(int i=1;i<=n+2;i++) printf("%d fa=%d son=%2d,%2d siz=%d rev=%d\n",i,fa[i],ch[i][0],ch[i][1],siz[i],rev[i]);
printf("\n");
}
void rotate(int p,int &k)
{
int q=fa[p],r=fa[q],w=wh(p);
if(q==k) k=p;
else ch[r][q==ch[r][1]]=p;
fa[ch[q][w]=ch[p][w^1]]=q;
fa[ch[p][w^1]=q]=p; fa[p]=r;
update(q); update(p);
//printf("After rotate(%d)\n",p); trPrint();
}
void splay(int p,int &k)
{
//printf("Splay %d to %d.\n",p,k);
while(p!=k)
{
int q=fa[p],r=fa[q];
if(q!=k)
if(wh(p)^wh(q)) rotate(p,k);
else rotate(q,k);
rotate(p,k);
}
}
int build(int fr,int to)
{
if(fr>to) return 0;
if(fr==to) {siz[fr]=1; return fr;}
int p=(fr+to)>>1;
fa[ch[p][0]=build(fr,p-1)]=p;
fa[ch[p][1]=build(p+1,to)]=p;
update(p);
return p;
}
int find(int x)
{
int p=rt;
while(true)
{
pushdown(p);
//printf("Find No.%d in %d.\n",x,p);
int sizL=siz[ch[p][0]]+1;
if(sizL>x) p=ch[p][0];
if(sizL==x) return p;
if(sizL<x) p=ch[p][1],x-=sizL;
}
}
void reverse(int fr,int to)
{
int p1=find(fr-1),p2=find(to+1);
//printf("Reverse [%d,%d], p1=%d, p2=%d\n",fr,to,p1,p2);
splay(p1,rt); splay(p2,ch[rt][1]);
int p=ch[p2][0];
rev[p]^=1;
//trPrint();
}
void type(int p)
{
if(p==0) return;
pushdown(p);
type(ch[p][0]);
if(p!=1 && p!=n+2) printf("%d ",p-1);
type(ch[p][1]);
}
int main()
{
scanf("%d%d",&n,&m);
rt=(n+3)>>1;
build(1,n+2);
for(int owo=1;owo<=m;owo++)
{
int fr,to;
scanf("%d%d",&fr,&to);
reverse(fr+1,to+1);
}
type(rt);
return 0;
}

BZOJ3223/洛谷P3391 - 文艺平衡树的更多相关文章

  1. [洛谷P3391] 文艺平衡树 (Splay模板)

    初识splay 学splay有一段时间了,一直没写...... 本题是splay模板题,维护一个1~n的序列,支持区间翻转(比如1 2 3 4 5 6变成1 2 3 6 5 4),最后输出结果序列. ...

  2. 洛谷 P3391 文艺平衡树

    题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 --b ...

  3. 洛谷P3391文艺平衡树(Splay)

    题目传送门 转载自https://www.cnblogs.com/yousiki/p/6147455.html,转载请注明出处 经典引文 空间效率:O(n) 时间效率:O(log n)插入.查找.删除 ...

  4. 洛谷P3391 文艺平衡树 (Splay模板)

    模板题. 注意标记即可,另外,涉及区间翻转操作,记得设立首尾哨兵. 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int ...

  5. BZOJ3224/洛谷P3391 - 普通平衡树(Splay)

    BZOJ链接 洛谷链接 题意简述 模板题啦~ 代码 //普通平衡树(Splay) #include <cstdio> int const N=1e5+10; int rt,ndCnt; i ...

  6. 洛谷.3391.文艺平衡树(fhq Traep)

    题目链接 //注意反转时先分裂r,因为l,r是针对整棵树的排名 #include<cstdio> #include<cctype> #include<algorithm& ...

  7. 洛谷 P3391 【模板】文艺平衡树(Splay)

    题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...

  8. 【阶梯报告】洛谷P3391【模板】文艺平衡树 splay

    [阶梯报告]洛谷P3391[模板]文艺平衡树 splay 题目链接在这里[链接](https://www.luogu.org/problemnew/show/P3391)最近在学习splay,终于做对 ...

  9. [luogu P3391] 文艺平衡树

    [luogu P3391] 文艺平衡树 题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区 ...

随机推荐

  1. 可等待计时器添加APC测试

    可等待计时器和用户计时器的最大区别在于用户计时器需要在应用程序中使用大量的用户界面基础设施,从而消耗更多的资源.此外,可等待计时器是内核对象,这意味着他们不仅可以在多个线程间共享,而且具备安全性. 用 ...

  2. Linux 查找命令汇总

    linux下查找命令挺多,本文以列表方式说明which.whereis.locate.find命令的区别: 命令 概述 语法 示例 适用OS 搜索结果 which 在PATH变量指定的路径中,搜索某个 ...

  3. 智能机器人chatbot论文集合

    机器不学习 jqbxx.com-专注机器学习,深度学习,自然语言处理,大数据,个性化推荐,搜索算法,知识图谱 今年开始接触chatbot,跟着各种专栏学习了一段时间,也读了一些论文,在这里汇总一下.感 ...

  4. Css3颜色值RGBA得表示方式

    RGBA(R,G,B,A) 取值 R:红色值.正整数 | 百分数 G:绿色值.正整数 | 百分数 B:蓝色值.正整数 | 百分数 A:Alpha透明度.取值0~1之间. 说明: RGBA记法. 此色彩 ...

  5. Spring Cache For Redis

    一.概述 缓存(Caching)可以存储经常会用到的信息,这样每次需要的时候,这些信息都是立即可用的. 常用的缓存数据库: Redis   使用内存存储(in-memory)的非关系数据库,字符串.列 ...

  6. Linux中变量#,@,0,1,2,*,$$,$?的意思

    $# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数 $@ 是传给脚本的所有参数的列表 $* 是以一个单字符串显示 ...

  7. oracle游标的知识点

    游标: 就是一个结果集(ResultSet) 游标语法: CURSOR 光标名 [(参数名 数据类型[,参数名 数据类型])] IS SELECT 语句; eg. cursor c1 is selec ...

  8. java foreach遍历的前提条件

    自我总结,欢迎拍砖,不胜感激! 目的: 加深foreach遍历的影响 证明:foreach遍历的前提条件是:list !=null ,而不是:list !=null && list.s ...

  9. java存放数据的5个地方

    1.寄存器:最快的存储区,位于处理器内部,但是寄存器的数量极其有限,所以寄存器根据需求进行分配,你不 能直接控制,也不能在程序中感觉到寄存器存在的任何迹象.(C/C+允许向寄存器建议寄存器配, 但它不 ...

  10. the first simple html page generated by div and table tags

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w ...