這是一道模板題。
讀入乙個長度為 n
的由小寫英文本母組成的字串,請把這個字串的所有非空字尾按字典序從小到大排序,然後按順序輸出字尾的第乙個字元在原串中的位置。位置編號為 1
到 n。除此之外為了進一步證明你確實有給字尾排序的超能力,請另外輸出 n−1
個整數分別表示排序後相鄰字尾的最長公共字首的長度。
一行乙個長度為 n
的僅包含小寫英文本母的字串。
第一行 n
個整數,第 i
個整數表示排名為 i
的字尾的第乙個字元在原串中的位置。
第二行 n−1
個整數,第 i
個整數表示排名為 i
和排名為 i+1
的字尾的最長公共字首的長度。
input
ababaoutput
5 3 1 4 2explanation1 3 0 2
排序後結果為:
aaba
ababa
bababa
1≤n≤105
時間限制:1s
空間限制:256mb
我的字尾平衡樹終於過了
#include#includeview code#include
#include
#include
#include
#define mid l+r>>1
#define rep(s,t) for(int i=s;i<=t;i++)
#define ren for(int i=first[x];i!=-1;i=next[i])
using
namespace
std;
inline
intread()
const
int maxn=100010
;typedef
long
long
ll;int h[maxn],ch[maxn][2
],c[maxn],tot,rt;
ll rk[maxn];
void rebuild(int
o,ll l,ll r)
void rotate(int& o,int
d,ll l,ll r)
int cmp(int x,int y)
void insert(int&o,ll l,ll r)
if(cmp(tot,o))
else
}void insert(int
x) void print(int
o) int
n,sa[maxn],rank[maxn],height[maxn];
int cmp2(int a,int b)
char
s[maxn];
intmain()
rep(
2,n) printf("
%d "
,height[i]);
return0;
}
Uoj 35 字尾排序 字尾陣列
統計 描述 提交 自定義測試 這是一道模板題。讀入乙個長度為 nn 的由小寫英文本母組成的字串,請把這個字串的所有非空字尾按字典序從小到大排序,然後按順序輸出字尾的第乙個字元在原串中的位置。位置編號為 11 到 nn。除此之外為了進一步證明你確實有給字尾排序的超能力,請另外輸出 n 1n 1 個整數...
UOJ35 字尾陣列(模板)
這是一道模板題。讀入乙個長度為 n n n 的由小寫英文本母組成的字串,請把這個字串的所有非空字尾按字典序從小到大排序,然後按順序輸出字尾的第乙個字元在原串中的位置。位置編號為 1 1 1 到 n n n。除此之外為了進一步證明你確實有給字尾排序的超能力,請另外輸出 n 1 n 1 n 1 個整數分...
樹上字尾排序
把字尾排序搞到了樹上。乙個節點的字串的定義為 這個節點到根經過的所有字元組成的字串。請將這些字串按字典序排序。輸出排名為i的字串所在的節點。特別地,如果兩個節點所代表的字串完全相同,它們的大小由它們的父親所代表的字串的大小決定,如果仍相同,則由它們編號的大小決定。就是自己的字串是第一關鍵字 第二個關...