P6166 [IOI2012]scrivener
题目大意
给出一个空字符串支持在末尾加上一个字符,查询某个位置的字符,回到 k k k 个操作前.
分析
显然的可持久化数组,可以通过可持久化线段树实现,为了方便处理,开始的区间是 1 1 1 到 1000000 1000000 1000000 开始,这样保证不会出问题,加上一个数就直接单点修改,查询也只要直接单点查询,对于每次修改对于修改的区间部分产生一个新的版本,其他仍然用之前版本的部分.
代码
#include<bits/stdc++.h>
#define RAP(i,first,last) for(int i=first;i<=last;++i)
#define LSON tree[now].lson
#define RSON tree[now].rson
#define MIDDLE ((left+right)>>1)
#define LEFT LSON,left,MIDDLE
#define RIGHT RSON,MIDDLE+1,right
#define NOW now_left,now_right
#define NEW_LSON tree[new_tree].lson
#define NEW_RSON tree[new_tree].rson
using namespace std;
const int maxM=2e6+7;
int N=1e6/*从1e6开始查询*/,M;
struct Tree
{int sum,lson,rson;
}tree[maxM*32];
int cnt=0;
void UpData(int &new_tree,int num,int ch,int now,int left=1,int right=N)//标准可持久化线段树
{if(num<left||right<num)//如果不会被修改就直接用原来的内容{new_tree=now;return;}new_tree=++cnt;//否则产生一个新的点if(left==right)//到叶节点就直接单点修改{tree[new_tree].sum=ch;return;}UpData(NEW_LSON,num,ch,LEFT);UpData(NEW_RSON,num,ch,RIGHT);
}
int Query(int k,int now,int left=1,int right=N)//单点查询
{if(k<left||right<k)return 0;if(left==right)//叶节点直接返回{return tree[now].sum;}return Query(k,LEFT)+Query(k,RIGHT);
}
int root[maxM];//记录每次修改的线段树的根节点编号
int len[maxM];//记录每个版本的数组长度
int main()
{cin>>M;char ch;int x;char add;int tot=0;//记录当前修改操作个数RAP(i,1,M){cin>>ch;if(ch=='T')//修改部分{++tot;cin>>add;len[tot]=len[tot-1]+1;UpData(root[tot],len[tot],add,root[tot-1]);}if(ch=='U')//回到x个版本前,就直接改变线段树的根节点就好了{++tot;cin>>x;root[tot]=root[tot-x-1];len[tot]=len[tot-x-1];}if(ch=='P')//单点查询{cin>>x;printf("%c\n",Query(x+1,root[tot]));}}return 0;
}
P6166 [IOI2012]scrivener相关推荐
- c++自带的可持久化平衡树?rope大法好!(超详细解答 + 5道例题讲解,可直接替代可持久化的线段树、并查集、平衡树!)
整理的算法模板合集: ACM模板 目录 c++自带的可持久化平衡树?rope大法好! 1. 声明 2. 支持操作 char类型的rope int类型的rope 3. 具体的细节 4. "可持 ...
- 【Rope大法好】【STL中丧心病狂的可持久化平衡树】
曾经我不会写平衡树--于是在STL中乱翻--学到了pb_ds库中的SXBK的斐波那契堆.支持kth的set,和--ext/rope 先发一个官方的 说明 (鸣谢maoxiaohan1999): htt ...
- (个人翻译)Scrivener交互式手册中文版FowWindows 03基础操作
文章目录 新手指引 主界面 活页夹 使用活页夹 特殊文件夹 其他文件夹没有特别之处 搜索 编辑器 使用编辑器 头视图 脚视图 检视器 概要与笔记 概要索引卡 笔记 标签与状态 书签 项目书签 元数据 ...
- (个人翻译)Scrivener交互式手册中文版FowWindows 01从这里开始
从这里开始 译者的话 本文档由个人翻译,感谢Google翻译.微软翻译.iTranslate的技术支持.此版本的翻译基于Scrivener for Windows 3.1.1.另,部分与原文出入或补充 ...
- 备注一下从MarginNote到Scrivener的过程
1.用MarginNote将英文文献进行翻译,保留一级标题,尽量让大钢结构在三层之内 2.将MarginNote文档通过word导出,1)在word中将">>"符号全部 ...
- 正版Scrivener 3 论文/小说写作工具神器软件
一款非常优秀的写作软件,提供了各种写作辅助功能,如标注多个文档.概述介绍.全屏幕编辑.快照等,能够轻松.便捷的辅助作者从作品构思.搜集资料.组织结构.增删修改到排版输出的整个写作流程. 作为一个专业的 ...
- (个人翻译)Scrivener交互式手册中文版FowWindows 02核心理念
核心概念 什么是Scrivener? Scrivener 关注于需要构思长篇文本的作家--小说家.记者.学者.编剧.剧作家.这是为制作手稿量身定做的一个活页本.剪贴簿.桌面工具集.大纲编辑器和文本编辑 ...
- Mac下如何在Scrivener 中插入MathType公式
MathType是一个"所见即所得"的数学公式编辑器,同时支持Windows和Macintosh 操作系统,能够在各种文档中加入复杂的数学公式和符号,在使用Scrivener写技术 ...
- Mac OS X 创新卡关三年,唯一看得出版本不同之处是「预设桌布」
当苹果将重点转移到 iOS,其桌面操作系统已陷入一片混乱.主要开发 Mac 的四位开发人员说:「是时候该转变了!」 如果传言是真的,今年 6 月 2 日苹果全球软件开发者年会 (WWDC),将是 WW ...
最新文章
- C++_STL——stack
- 南洋理工75页最新「深度学习对话系统」大综述论文,最全面概述深度学习对话技术进展...
- Android-Binder进程间通讯机制-多图详解
- 企业级 SpringBoot 教程 (十二)springboot集成apidoc
- 你以为ACI=SDN?大错特错!
- 全球及中国木材加工行业运行状况与投资产值预测报告2022版
- 数据库毗连过多的错误,年夜概的启事分解及措置惩罚行动
- TCP协议——三次握手与四次关闭
- 在Spring Boot中使用Vaadin的简介
- 面向数据科学的概率论 一、基础
- GDAL读取S-57海图数据中文属性值乱码问题解决(续)
- android垂直排列元素_元素的视图属性之client
- 【数据结构】二分查找代码模板
- 传感器网络与物联网-1.射频识别技术
- 地铁译:Spark for python developers --- 搭建Spark虚拟环境 4...
- 计算机快捷键大全截图,电脑截图按什么键?电脑截图的快捷键是什么
- 笔记本电脑怎样重装系统
- 使用STM32的DFSDM外设来驱动PDM麦克风进行音频采集
- GPGPU渲染GPU的工作原理和认知总结
- 翻译,怎样将图片文字翻译成英文
热门文章
- 超级巡警4.0 Beta6 发布,新增Arp防火墙!
- 微信H5页面生成图片并长按下载
- 跑跑卡丁车 android ios,跑跑卡丁车官方竞速版ios版
- 什么?跑跑卡丁车明天要出手游了?电脑玩跑跑卡丁车手游攻略提前看
- 微擎按照UID获取用户绑定手机号
- 2019.8.2 JZ DAY2总结
- 在 The Sandbox Alpha 第三季中体验金塔谷社交中心,探索多生物群系
- 小学生计算机模型的制作,19届中小学电脑制作活动精选课件:创意环保设计
- PostgreSQL命令行执行查询
- BIO,NIO,AIO分别是什么?他们有什么区别?