#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e6+1e5;
unsigned int SEED = 17;
inline int Rand(){
SEED=SEED*1103515245+12345;
return SEED;
}
typedef pair<int,int> P;
struct TP{
int lc[maxn],rc[maxn],fix[maxn],wgt[maxn],size[maxn],rev[maxn];
char val[maxn];
int tot,root;
void init(){
memset(rev,0,sizeof rev);
tot=1;root=0;
lc[tot]=rc[tot]=rev[tot]=0;
}
int node(char v){
lc[tot]=rc[tot]=0;
fix[tot]=Rand();
wgt[tot]=size[tot]=1;
rev[tot]=0;
val[tot]=v;
return tot++;
}
void pd(int o){
if(rev[o]&1){
swap(lc[o],rc[o]);
if(lc[o]) rev[lc[o]]+=rev[o];
if(rc[o]) rev[rc[o]]+=rev[o];
}
rev[o]=0;
}
void pu(int o){
size[o]=wgt[o];
size[o]+=size[lc[o]]+size[rc[o]];
}
void print(int o){
if(lc[o]) print(lc[o]);
printf("%c",val[o]);
if(rc[o]) print(rc[o]);
}
int merge(int a,int b){
if(!a) return b;
if(!b) return a;
pd(a);pd(b);
if(fix[a]>fix[b]){
rc[a]=merge(rc[a],b);
pu(a);
return a;
}
else{
lc[b]=merge(a,lc[b]);
pu(b);
return b;
}
}
P split(int a,int k){
if(!a) return P(0,0);
P p;
pd(a);
if(size[lc[a]]>=k){
p=split(lc[a],k);
lc[a]=p.second;
pu(a);
p.second=a;////
}
else{
p=split(rc[a],k-size[a]-1);//
rc[a]=p.first;
pu(a);
p.first=a;
}
return p;
}
void insert(int k,int len){
char c; int tmp;
P p=split(root,k);
scanf("%c",&c);
for(int i = 1; i <= len; i++){
scanf("%c",&c);
tmp=node(c);
p.first=merge(p.first,tmp);
}
root=merge(p.first,p.second);
}
void del(int k,int len){
P x,y;
x=split(root,k);
y=split(x.second,len);
root=merge(x.first,y.second);
}
}tp;
int main(){
P x,y;
int n,now,num;char str[111];
now=0;
tp.init();
scanf("%d",&n);
for(int i = 1; i <= n; i++){
scanf("%s",str);
if(str[0]=='M'){
scanf("%d",&now);
}
if(str[0]=='I'){
scanf("%d",&num);
tp.insert(now,num);
}
if(str[0]=='D'){
scanf("%d",&num);
tp.del(now,num);
}
if(str[0]=='R'){
scanf("%d",&num);
x=tp.split(tp.root,now);
y=tp.split(x.second,num);
tp.rev[y.first]++;
x.second=tp.merge(y.first,y.second);
tp.root=tp.merge(x.first,x.second);
}
if(str[0]=='G'){
x=tp.split(tp.root,now);
y=tp.split(x.second,1);
tp.print(y.first);printf("\n");
x.second=tp.merge(y.first,y.second);
tp.root=tp.merge(x.first,x.second);
}
if(str[0]=='P'){
now--;
}
if(str[0]=='N'){
now++;
}
}
}

文本编辑器 未完成 Treap的更多相关文章

  1. [NOI2003]文本编辑器 [Fhq Treap]

    [NOI2003]文本编辑器 没啥好说的 就是个板子 #include <bits/stdc++.h> // #define int long long #define rep(a , b ...

  2. 原生JS实现简单富文本编辑器2

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 富文本编辑器Simditor的简易使用

    最近打算自己做一个博客系统,并不打算使用帝国cms或者wordpress之类的做后台管理!自己处于学习阶段也就想把从前台到后台一起谢了.好了,废话不多说了,先来看看富文本编辑器SimDitor,这里是 ...

  4. 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范

    昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...

  5. 关于SMARTFORMS文本编辑器出错

    最近在做ISH的一个打印功能,SMARTFORM的需求本身很简单,但做起来则一波三折. 使用环境是这样的:Windows 7 64bit + SAP GUI 740 Patch 5 + MS Offi ...

  6. 基于trie树的具有联想功能的文本编辑器

    之前的软件设计与开发实践课程中,自己构思的大作业题目.做的具有核心功能,但是还欠缺边边角角的小功能和持久化数据结构,先放出来,有机会一点点改.github:https://github.com/chu ...

  7. UEditor百度富文本编辑器--让编辑器自适应宽度的解决方案

    UEditor百度富文本编辑器的initialFrameWidth属性,默认值是1000. 不能够自适应屏幕宽度.如图1: 刚开始的时候,我是直接设置initialFrameWidth=null的.效 ...

  8. [bzoj1269][AHOI2006文本编辑器editor] (splay模版题 or pb_ds [rope]大法)

    Description 这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器.你能帮助他吗?为了明确任务目标,可可对“文本编辑器”做了一个抽象的定义:   文本:由0个或 ...

  9. Bzoj1269 [AHOI2006]文本编辑器editor

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3678  Solved: 1380 Description 这些日子,可可不和卡卡一起玩了,原来可可正 ...

随机推荐

  1. 面试题--CVTE

    2.HashMap和HashSet的实现原理,hashset 和hashMap区别 HashSet底层就是HashMap实现的, *HashMap* *HashSet* HashMap实现了Map接口 ...

  2. 用conda创建一个tensorflow 虚拟环境

    创建your——user——name = tensorflow 的虚拟环境 xinpingdeMacBook-Pro:~ xinpingbao$ conda create -n tensorflow ...

  3. 泊松分布 & 指数分布

    一.泊松分布 日常生活中,大量事件是有固定频率的. 某医院平均每小时出生3个婴儿 某公司平均每10分钟接到1个电话 某超市平均每天销售4包xx牌奶粉 某网站平均每分钟有2次访问 它们的特点就是,我们可 ...

  4. UIPopoverController 简单用法(全代码)

     AppDelegate.m - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDic ...

  5. 【2008nmj】Logistic回归二元分类感知器算法.docx

    给你一堆样本数据(xi,yi),并标上标签[0,1],让你建立模型(分类感知器二元),对于新给的测试数据进行分类. 要将两种数据分开,这是一个分类问题,建立数学模型,(x,y,z),z指示[0,1], ...

  6. TensorFlow中文手册

    注意:本文只为读书笔记. 第一章 起步 - 起步 - [介绍](SOURCE/get_started/introduction.md) - [下载及安装](SOURCE/get_started/os_ ...

  7. (一)在HTML页面中实现一个简单的Tab

    在HTML页面中实现一个简单的Tab 为了充分利用有限的HTML页面空间,经常会采用类似与TabControl的效果通过切换来显示更多的内容.本文将采用一种最为简单的方法来实现类似如Tab页切换的效果 ...

  8. SQL Server 2012自动备份

    SQL 2012和2008一样,都可以做维护计划,来对数据库进行自动的备份. 现在做这样一个数据库维护的计划,每天0点对数据库进行差异备份,每周日0点对数据库进行完全备份,并且每天晚上10点删除一次过 ...

  9. C# 读取Text文本,写入Text文本

    //读取 private void showMess() { this.dataGridViewX2.Rows.Clear(); //将车辆信息一行行添加到datagreatview 里面 Strea ...

  10. NPOI 2.1.3.1导入Excel

    引入NPOI 2.1.3.1的包 项目引入 using NPOI.XSSF.UserModel;using NPOI.SS.UserModel; 控制器方法: public ActionResult ...