HDU6345 子串查詢 字首和 線段樹

2022-09-03 04:42:11 字數 1111 閱讀 8638

求給定串ll到r

r的位置裡字典序最小的字串出現的次數。

字典序最小的串,肯定是乙個字元啊。

可以用線段樹維護一下。時間複雜度o(t

qlog

n)o(

tqlo

gn)當然也可以用字首和。時間複雜度o(t

(q+n

))o(

t(q+

n))線段樹:

#include #include #include #define n 1000100

using namespace std;

int n,t,m;

char c[n];

struct node

tree[n*3];

void make(int x) //建樹

int mid=(tree[x].l+tree[x].r)/2;

tree[x*2].l=tree[x].l;

tree[x*2].r=mid;

tree[x*2+1].l=mid+1;

tree[x*2+1].r=tree[x].r;

make(x*2);

make(x*2+1);

if (tree[x*2].c==tree[x*2+1].c) //最小字元和出現次數更改

else if (tree[x*2].cmid) return find(x*2+1,l,r);

int a=find(x*2,l,mid);

int b=find(x*2+1,mid+1,r);

if (a%100b%100) return b; //取出字元和ascii碼

return (a/100+b/100)*100+a%100; //更新

}int main()

} return 0;

}

字首和:
#include #include #include #define n 1000100

using namespace std;

int s[n][30],t,n,m,l,r;

char c[n];

int main()

} }return 0;

}

HDU6345 子串查詢 字首和

字首和是一種重要的預處理,能大大降低查詢的時間複雜度。字首和,差分。其實可以一起學的哈哈。文章首發 推薦這個博主寫的文章 x丶 hdu6345 度度熊的字串課堂開始了!要以像度度熊一樣的天才為目標,努力奮鬥哦!為了檢驗你是否具備不聽課的資質,度度熊準備了乙個只包含大寫英文本母的字串 a 1,n a1...

HDU 6345 子串查詢 暴力

題意是每組給定乙個字串,在有限查詢次數內輸出所要查詢區間的字典序最小的子串個數。字典序最小的子串,就是所查詢區間中字典序最小的單個字元,問題就轉化成了求一段區間內字典序最小的字元個數。開始時盲目暴力,直接用桶排序的做法一段一段去求,果然t了 這種就不貼 了 然後想到先掃一遍,求出從字串首位到第 i ...

hdu2345 子串查詢 字首和預處理

度度熊的字串課堂開始了!要以像度度熊一樣的天才為目標,努力奮鬥哦!為了檢驗你是否具備不聽課的資質,度度熊準備了乙個只包含大寫英文本母的字串 a 1,n a1a2 ana 1,n a1a2 an,接下來他會向你提出 qq 個問題 l,r l,r 你需要回答字串 a l,r alal 1 ara l,r...