UOJ 35 字尾排序

2022-05-04 01:09:10 字數 1573 閱讀 7787

這是一道模板題。

讀入乙個長度為 n

的由小寫英文本母組成的字串,請把這個字串的所有非空字尾按字典序從小到大排序,然後按順序輸出字尾的第乙個字元在原串中的位置。位置編號為 1

到 n。除此之外為了進一步證明你確實有給字尾排序的超能力,請另外輸出 n−1

個整數分別表示排序後相鄰字尾的最長公共字首的長度。

一行乙個長度為 n

的僅包含小寫英文本母的字串。

第一行 n

個整數,第 i

個整數表示排名為 i

的字尾的第乙個字元在原串中的位置。

第二行 n−1

個整數,第 i

個整數表示排名為 i

和排名為 i+1

的字尾的最長公共字首的長度。

input

ababa
output
5 3 1 4 2

1 3 0 2

explanation

排序後結果為:

aaba

ababa

bababa

1≤n≤105

時間限制:1s

空間限制:256mb

我的字尾平衡樹終於過了

#include#include

#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;

}

view code

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的字串所在的節點。特別地,如果兩個節點所代表的字串完全相同,它們的大小由它們的父親所代表的字串的大小決定,如果仍相同,則由它們編號的大小決定。就是自己的字串是第一關鍵字 第二個關...