洛谷P2412 查單詞 trie樹 RMQ

2022-04-06 21:44:48 字數 1750 閱讀 6594

滾粗了的hansbug在收拾舊英語書,然而他發現了什麼奇妙的東西。

蒟蒻hansbug在一本英語書裡面找到了乙個單詞表,包含n個單詞(每個單詞內包含大小寫字母)。現在他想要找出某一段連續的單詞內字典序最大的單詞。

輸入格式:

第一行包含兩個正整數n、m,分別表示單詞個數和詢問個數。

接下來n行每行包含乙個字串,僅包含大小寫字母,長度不超過15,表示乙個單詞。

再接下來m行每行包含兩個整數x、y,表示求從第x到第y個單詞中字典序最大的單詞。

輸出格式:

輸出包含m行,每行為乙個字串,分別依次對應前面m個詢問的結果。

輸入樣例#1:

5 5

absi

hansbug

lznkkk

yyy1 5

1 11 2

2 34 4

輸出樣例#1:

yyy

absi

hansbug

lznkkk

樣例說明:

第一次操作:在中找出字典序最大的,故為yyy

第二次操作:在中找出字典序最大的,故為absi

第三次操作:在中找出字典序最大的,故為hansbug

第四次操作:在中找出字典序最大的,故為lzn

第五次操作:在中找出字典序最大的,故為kkk

資料規模:

注意事項:1.該題目單詞字典序比對過程中大小寫不敏感,但是輸出必須輸出原單詞

2.該題目時間限制為0.2s

此題暴力給字串比較大小是玄學,80~ac

正解:trie樹給字串排序,st表做rmq

先序遍歷就是排序

一堆re,結果發現len打成n了

#include #include 

#include

#include

#include

using

namespace

std;

const

int n=50005,l=17

;inline

intread()

while(c>='

0'&&c<='9')

return x*f;

}int

n,m,l,r;

char s[n][20],a[20

];int ch[n*l][27],size=0,val[n*l];

void insert(char s,int n,int

id) val[u]=id;//

printf("ins %d %d\n",u,id);

}int rank[n],p=0

;void dfs(int u)

int mx[n][17

];inline

int maxs(int i,int j)

void

initrmq()

inline

int query(int l,int

r)int

main()

dfs(

0);//

sort

//for(int i=1;i<=n;i++) printf("%d %d\n",i,rank[i]);

initrmq();

for(int i=1;i<=m;i++)

}

洛谷 2412 查單詞

滾粗了的hansbug在收拾舊英語書,然而他發現了什麼奇妙的東西。udp2.t3如果遇到相同的字串,輸出後面的 蒟蒻hansbug在一本英語書裡面找到了乙個單詞表,包含n個單詞 每個單詞內包含大小寫字母 現在他想要找出某一段連續的單詞內字典序最大的單詞。第一行包含兩個正整數n m,分別表示單詞個數和...

洛谷2922 秘密訊息(Trie樹)

既然是讀入字串然後與之前的字串進行匹配,那麼肯定是對之前的字串建立trie樹,這點毋庸置疑。那麼就是統計有多個字串作為他的字首出現以及該字串是多少個字串的字首,那麼就與 簿一題類似了。我記錄經過該點的字串數量以及以該點作為結束點的數量,那麼最後答案就是這條路徑上結束點的數量之和 經過最後點的字串數量...

洛谷P4092樹 並查集

題目 利用並查集,倒序離線,那麼從倒序來看被撤銷標記的點就再也不會被標記,所以用並查集跳過 莫名其妙的wa,調了一晚上,好像是dfs的地方有問題,莫名其妙的 注釋掉的是wa的,現有的可以a,不知怎的。如下 include include using namespace std intconst ma...