题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1.插入 xx 数 2.删除 xx 数(若有多个相同的数,因只删除一个) 3.查询 xx 数的排名(排名定义为比当前数小的数的个数 +1+1 .若有多个相同的数,因输出最小的排名) 4.查询排名为 xx 的数 5.求 xx 的前驱(前驱定义为小于 xx ,且最大的数) 6.求 xx 的后继(后继定义为大于 xx ,且最小的数) 输入输出格式 输入格式: 第一行为 nn ,表示操作的个数,下面 nn 行每行有两
题目链接 第一次写(2017.11.7): #include<cstdio> #include<cctype> using namespace std; const int N=1e5+5,INF=1e9; int size,root,t[N],sz[N],son[N][2],fa[N],cnt[N]; inline int read() { int now=0,f=1;register char c=getchar(); for(;!isdigit(c);c=getchar())
题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入 xx 数 删除 xx 数(若有多个相同的数,因只删除一个) 查询 xx 数的排名(排名定义为比当前数小的数的个数 +1+1 .若有多个相同的数,因输出最小的排名) 查询排名为 xx 的数 求 xx 的前驱(前驱定义为小于 xx ,且最大的数) 求 xx 的后继(后继定义为大于 xx ,且最小的数) 输入输出格式 输入格式: 第一行为 nn ,表示操作的个数,下面 nn 行每行有两个数 optopt 和
题面 洛谷 题解 首先,我们知道求最长公共前缀可以用二分答案+hash来求 因为有修改操作, 考虑将整个字符串的hash值放入splay中 接着就是splay的基本操作了 Code #include<bits/stdc++.h> #define LL long long #define RG register const int N = 500010; typedef unsigned long long ull; using namespace std; inline int gi() {