前言
众所周知,map是用rbt写的。
rbt相对来说效率较高,但,编码也难。
那么,有没有什么编码轻松、效率也高的方法呢?
本人想到了一种平衡树:treap。
treap每次操作前都需要附一个优先级,如果我们把传入的下标处理为优先级,那么,不就可以维护了吗?
于是,本蒟蒻开始了尝试。
优先级(下标)处理
对于c++的stl容器中,最难处理的就是字符串了。
字符串特性丰富,灵活多变。考虑维护他最后10位的ascll码与他的位数之和。
这样,就可以存储绝字符串优先级了。
判重的方式也简单:先比较优先级,再暴力判重,如果发现误判,将这个字符串加上一个随机值,存储下来。
然后,代码时间!(仅给出下标转换法,其他treap 操作省略)
int do_intt(string str)
{
int sum=0,len;
len=str.length();
if (len<=10)
{
for (int i=0;i<len;i++) sum+=str[i];
}
else
{
for (int i=len-11;i<len;i++) sum+=str[i]
}
sum+=len;
}