当前位置: 首页 > news >正文

[Non] 字符串问题

字符串问题

大意

插入字符,查询字符。
初始串 \(s\), \(|s| \le 10^6\)

思路

可以用平衡树,但是我选择更为强势的 STL 中的 rope。

头文件:#include<ext/rope>

crope r1;           // 存储 char 的 rope
wrope r2;           // 存储 wchar_t 的 rope
rope<long long> r3; // 也可以存储其他基本类型

rope 的大部分操作复杂度均为 \(O(\log n)\),底层基于可持久化平衡树实现。

函数名 功能描述 示例用法
push_back(x) 在末尾添加单个字符 r.push_back('a');
append(s) 在末尾追加字符串/rope r.append("abc");
insert(pos, s) pos 位置插入字符串/rope r.insert(2, "xyz");
erase(pos, n) pos 开始删除 n 个字符 r.erase(1, 10);
replace(pos, n, s) posn 个字符替换为 s r.replace(1, 2, "ok");
substr(pos, n) 提取从 pos 开始的 n 个字符 crope sub = r.substr(2, 3);
at(i)[i] 访问下标为 i 的字符 char c = r[0];
size() 返回当前长度 int len = r.size();

rope 最强大的特性在于它支持 \(O(1)\) 的对象拷贝,这使得它能以极低的时间和空间成本维护历史版本。

当你将一个 rope 赋值给另一个时,底层并不拷贝树结构,而是增加引用计数。只有在其中一个对象发生修改时,才会局部复制受影响的节点。

crope r1 = "v1_data"; 
crope r2 = r1;         // O(1) 拷贝,此时 r1 和 r2 共享底层节点
r2.insert(0, "new_");  // 修改 r2,r1 保持不变(自动实现可持久化)

如果题目要求查询“第 k 次操作后的状态”,可以直接开一个 rope 数组记录快照:

crope history[MAX_VERSION];int main() {history[0] = "initial_state"; // 初始状态for(int i = 1;i <= m;++ i){history[i] = history[i - 1]; // O(1) 继承上一个版本// 在当前版本上进行操作int opt, pos; char c;cin >> opt >> pos >> c;if(opt == 1){// 修改当前版本,不会影响 history[i - 1]history[i].insert(pos, c);}}
}

记得加:using namespace __gnu_cxx;

代码

#include<iostream>
#include<ext/rope>
using namespace std;
using namespace __gnu_cxx;string s;
int m;
crope r;int main(){cin >> s;cin >> m;r.append(s.c_str());while(m --){char op;cin >> op;if(op == 'I'){char c; int p; cin >> c >> p;if(p > r.size()){r.append(c);}else{r.insert(p - 1, crope(1, c));}}else{int x; cin >> x;cout << r[x - 1] << '\n';}}return 0;
}
http://www.jsqmd.com/news/254809/

相关文章:

  • 谷歌Veo 3.1更新:更一致性、更具创造力和控制力
  • 评正高写书10万字什么价格?
  • Day15对象的方法与遍历对象
  • SCI分区是怎么划分的?
  • 深圳ACFlow智能营销系统:2026年中小企业AI驱动营销新范式
  • ACP:2.从一个 .NET 实战开始,看 Agent 带来的真实差异
  • 工业级文本转SQL新思路:成本暴降、超3000列超大数据库依然稳健
  • C++跨平台开发挑战的技术
  • 万卡的部署架构
  • IDM插件开发创意赛
  • Claude Code 在 Windows 下的 nul 文件问题解决方案
  • 建模智能体,AI 时代的数据治理新范式
  • DCDN和CDN科普:动态内容加速的秘密武器
  • 苹果手机照片怎么导入电脑?苹果手机传输照片就用这5招
  • 7843784538745
  • 探索AI原生应用领域,AI代理引领新潮流
  • LLM伦理推理让临床决策更公平
  • 从ChatBI到Agentic BI:衡石如何构建“自主决策与执行”的数据智能体
  • 基于深度学习的肺炎检测系统(YOLOv8+YOLO数据集+UI界面+Python项目+模型)
  • 2025年华南理工大学计算机考研复试机试真题(解题思路 + AC 代码)
  • 2025年济南大学计算机考研复试机试真题(解题思路 + AC 代码)
  • AI aigc
  • 【1 月小记】Part 4: 数位 DP - L
  • 2025年湖南大学计算机考研复试机试真题(解题思路 + AC 代码)
  • 2026最新31888标准面料推荐!国内优质面料品牌权威榜单发布,资质与品质双优助力纺织行业高质量发展 - 品牌推荐2026
  • 2026年AI智能软硬件开发十大排名权威发布
  • 2025年华东师范大学计算机考研复试机试真题(解题思路 + AC 代码)
  • 吴恩达深度学习课程五:自然语言处理 第二周:词嵌入(一)词汇表征和类比推理
  • 实用指南:glTF PBR材质 / 3ds Max设置导入导出glb/gltf
  • 一款专为 WinUI XAML 设计的快速原型设计工具,生成的代码可轻松复制到Visual Studio中!