文本编辑器 未完成 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 这些日子,可可不和卡卡一起玩了,原来可可正 ...
随机推荐
- “Device eth0 has different MAC address than expected, ignoring.”问题
配IP后进行激活的时候提示如下错误:("Device eth0 has different MAC address than expected, ignoring.") 百度了下, ...
- c语言实践 创建两个包含8个元素的double类型数组,第二个元素的每个元素的值都是对应前一个元素的前n个元素的和
意思就是第二个元素的num[2]等于第一个元素的num[0]+num[1]+num[2] #define COUNT 8 int main(void) { double num1[COUNT]; do ...
- c# 多维数组、交错数组(转化为DataTable)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Nhibernate HQL 匿名类(严格说是map的使用以及构造函数的使用
1.map的使用 var hql=string.Format(@"select new map( tc.LimitIndexType as LimitIndexType, tc.LimitS ...
- SpringMVC——处理 JSON:使用 HttpMessageConverter
一.SpringMVC处理JSON流程 1. 加入 jar 包: jackson-annotations-2.1.5.jarjackson-core-2.1.5.jarjackson-databind ...
- 实践作业3:接到任务及思考DAY1
今天,老师又布置了新的学习任务,关于白盒测试.感觉黑盒测试,我们用的比较多,白盒测试就相对陌生了.上课的时候老师虽然也进行了一定的点拨,外加我们学习了SPOC视频,但是并没有看到什么具体的项目,所以实 ...
- angular 服务之间依赖注入
import { Injectable } from '@angular/core'; @Injectable() export class LoggerServiceService { constr ...
- 倍增求lca(模板)
定义LCA,最近公共祖先,是指一棵树上两个节点的深度最大的公共祖先.也可以理解为两个节点之间的路径上深度最小的点.我们这里用了倍增的方法求了LCA.我们的基本的思路就是,用dfs遍历求出所有点的深度. ...
- ubuntu命令行安装tomcat8
环境: 虚拟机VM14 Ubuntu16.04 java 1.8 步骤: 先更新 sudo apt-get update 然后安装: sudo apt-get install tomcat8 等一会 ...
- P3230 [HNOI2013]比赛
$ \color{#0066ff}{ 题目描述 }$ 沫沫非常喜欢看足球赛,但因为沉迷于射箭游戏,错过了最近的一次足球联赛.此次联 赛共N支球队参加,比赛规则如下: (1) 每两支球队之间踢一场比赛. ...