首页 > 其他分享 >stl学习之rope

stl学习之rope

时间:2023-01-04 00:22:06浏览次数:44  
标签:学习 stl number rope read int test op

简介

rope是本人在极度不想敲平衡树的情况下从朋友偶然听说的,了解之后用寥寥数行边秒杀了那道平衡树的题。笔者遂深感其强大与低调,故写笔记以纪念之。

头文件与定义

#include<bits/stdc++.h>
#include<ext/rope>
using namespace std;
using namespace __gnu_cxx;
rope<char> test;

一些函数

   test.push_back(48);	
   test.push_back(48);
   test.insert(1,66);
   test.insert(3,67);//在某处插入某值
   test.erase(pos,len)//从某处开始删除len个值
   test.at(pos)//访问pos处的值

核心用法——可持久化

这个操作的存在使得它可以O(1)复制自己,巨nb

rope<char>*a,*b;
a=new rope<char>;
b=new rope<char>(*a);

例题

The first line will contain 0 < N ≤ 105,0 < Q < 5*105, the number of elements in TODO-list and number of queries.
Then a line with N numbers follows. Each number 0 ≤ Ak ≤ 109 means kth number in her TODO-list.Afterward, Q lines follow, each beginning with number 1 ≤ a ≤ 3
1 k x means that you will add number x to position k
2 k means that you will erase number from position k
3 k means that you will print number from position k
image

代码

本人的提交记录貌似查看不了代码。本题代码来自队友zzh的博客,感谢他

#include <bits/stdc++.h>
#include <ext/rope>
using namespace std;
using namespace __gnu_cxx;
rope<int> r;
int n, m, a;
int op, k, x;

void read(int &x){
	x = 0;
	char c = getchar();
	while(c > '9' || c < '0') c = getchar();
	while(c <= '9' && c >= '0'){
		x = 10 * x + c - '0';
		c = getchar();
	}
	return;
}

int main(){
	read(n),read(m);
	for(int i = 0; i < n; i ++){
		read(a);
		r.push_back(a);
	}
	while(m --){
		read(op), read(k);
		if(op == 1){
			read(x);
			r.insert(k - 1, x);
		}
		else if(op == 2){
			r.erase(k - 1, 1);
		}
		else if(op == 3){
			printf("%d\n", r[k - 1]);
		}
	}
}

标签:学习,stl,number,rope,read,int,test,op
From: https://www.cnblogs.com/WXk-k/p/17023766.html

相关文章

  • Spring IOC官方文档学习笔记(六)之自定义bean的特性
    1.生命周期回调(1)如果我们想要介入bean的生命周期,可通过实现spring中的InitializingBean和DisposableBean接口来达到这一目的,spring会调用InitializingBean中的afterPro......
  • 《STL 源码剖析》学习笔记之容器(二)list
    [图]Theorange 2019-08-061、list概述相较于vector的连续线性空间,list就显得复杂许多,它的好处是每次安插或删除一个元素,就配置或释放一个元素空间。因此,list对于空间......
  • 从零开始学习 MySQL 系列--索引、视图、导入和导出
    前言上篇文章我们学习了数据库和数据表操作语句,今天我们学习下数据库索引,视图,导入和导出的知识。作为基础篇,不会涉及到关于索引和视图的高级应用和核心概念,但是基本操作大家......
  • 「AcWing学习记录」区间问题
    AcWing905.区间选点原题链接给定N个闭区间[ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。输出选择的点的最小数量。位于区间端点上的点......
  • Google分布式文件系统GFS论文学习
    GFS作为最著名的分布式文件系统,首先具备了大规模、可扩展、适配大文件、自动运维等高级特性。虽然是比较早期的分布式文件系统,但是它里面的设计思想还是值得现代分布式系统......
  • PropertiesDemo
     importorg.apache.commons.configuration.ConfigurationException;importorg.apache.commons.configuration.PropertiesConfiguration;importjava.io.File;importjava......
  • 在线视频项目学习笔记(六)—项目总结
    一、面试的问题1.自我介绍我是谁,在哪上学,最近做了个什么项目2.简单介绍项目a).项目是一个什么类型项目?应学项目"社交类学习类APP项目""社交类项目用户可以发布视......
  • js有关dom操作学习
    dom对象就是操作网页的documentdom节点:整个文档是一个文档节点(document对象)每个HTML元素是元素节点(element对象)HTML元素内的文本是文本节点(text对象......
  • 框架课学习笔记--复习篇
    现在springboot框架课完成前端游戏界面,后端登录注册页面。现在复习vue,巩固学到的知识,反复的看git的两个作用,一可以看到历史版本代码。存档的功能。二同步代码同步不......
  • STL补充
    1vector,变长数组,倍增的思想1size()返回元素个数2empty()返回是否为空3clear()清空4front()/back()5push_back()/pop_back()6begin()/end()7[]8......