文本编辑器 未完成 Treap
#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的更多相关文章
- [NOI2003]文本编辑器 [Fhq Treap]
[NOI2003]文本编辑器 没啥好说的 就是个板子 #include <bits/stdc++.h> // #define int long long #define rep(a , b ...
- 原生JS实现简单富文本编辑器2
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 富文本编辑器Simditor的简易使用
最近打算自己做一个博客系统,并不打算使用帝国cms或者wordpress之类的做后台管理!自己处于学习阶段也就想把从前台到后台一起谢了.好了,废话不多说了,先来看看富文本编辑器SimDitor,这里是 ...
- 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范
昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...
- 关于SMARTFORMS文本编辑器出错
最近在做ISH的一个打印功能,SMARTFORM的需求本身很简单,但做起来则一波三折. 使用环境是这样的:Windows 7 64bit + SAP GUI 740 Patch 5 + MS Offi ...
- 基于trie树的具有联想功能的文本编辑器
之前的软件设计与开发实践课程中,自己构思的大作业题目.做的具有核心功能,但是还欠缺边边角角的小功能和持久化数据结构,先放出来,有机会一点点改.github:https://github.com/chu ...
- UEditor百度富文本编辑器--让编辑器自适应宽度的解决方案
UEditor百度富文本编辑器的initialFrameWidth属性,默认值是1000. 不能够自适应屏幕宽度.如图1: 刚开始的时候,我是直接设置initialFrameWidth=null的.效 ...
- [bzoj1269][AHOI2006文本编辑器editor] (splay模版题 or pb_ds [rope]大法)
Description 这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器.你能帮助他吗?为了明确任务目标,可可对“文本编辑器”做了一个抽象的定义: 文本:由0个或 ...
- Bzoj1269 [AHOI2006]文本编辑器editor
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3678 Solved: 1380 Description 这些日子,可可不和卡卡一起玩了,原来可可正 ...
随机推荐
- SqlServer------范式小结
说明:大多数初学者对于关系数据库中的范式很是头疼,我本人也是,所以今天又看了视频,总结了一下内容,尽量语言通俗易懂,少用专业术语以及概念. 首先要理解几个键值. 超键:在关系模式中,能唯一标识元组的属 ...
- SqlDataAdapter 批量更新数据库表
在数据库中批量插入数据许多人都已经了解了,就是使用.net 中的SqlBulkCopy对象(MSDN详解).我们在做评教系统的时候使用过这个对象,它能将数据表批量导入到数据库中,效率比单条插入数据效率 ...
- SparkR 读取数据& Spark运行的配置
1.本地LOCAL环境安装Spark并试运行配置(在Ubuntu系统下例子) # 打开文件配置环境变量: JAVA,SCALA,SPARK,HADOOP,SBT gedit /etc/profile ...
- 数据库连接池DBUtils
安装 pip3 install DBUtils DBUtils是Python的一个用于实现数据库连接池的模块. 此连接池有两种连接模式: 模式一:为每个线程创建一个连接,线程即使调用了close方法, ...
- SpringMVC——拦截器
Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor接口 preHandle():这个方法在业务处理 ...
- Which Uri Encoding method should i use in C#/.net?
June 19, 2015 This too is one of the boring "factual" posts. Sorry Lachlan. I never know w ...
- ORCHARD学习教程-安装
安装说明:测试对象为正式版1.8 安装方法: 使用Microsoft Web Platform Installer 利用Microsoft WebMatrix 来安装 Working with Orc ...
- jQuery事件(持续更新中)
方法 描述 bind() 向匹配元素附加一个或更多事件处理器 blur() 触发.或将函数绑定到指定元素的 blur 事件 change() 触发.或将函数绑定到指定元素的 change 事件 cli ...
- android Base64字符串与Bitmap相互转换
/** * 将bitmap转换成base64字符串 * * @param bitmap * @return base64 字符串 */ public String bitmaptoString(Bit ...
- Expression表单式树
余于项目中逢Expression(表达式树),然今未明其用途也,记之以温. using System; using System.Collections.Generic; using System.L ...