bzoj5253 2018多省省隊聯測 制胡竄

2022-03-03 22:37:46 字數 2658 閱讀 2955

字尾自動機挺好毒瘤的題。

我們考慮哪些切點是不合法的。肯定是所有的匹配串都被切了。

我們考慮第乙個切口的位置。

當第乙個切口在第乙個出現位置前時,第二個切口必須切掉所有的串。

當第乙個切口在$l_$和$l_$間的時候(此時必須保證切掉第乙個串),第二個切口必須切掉$s_$到$s_$這些串

當第乙個切口在$l_$後時(此時依舊需要保證切掉第乙個串),第二個切口隨便放。

於是我們將詢問離線,對於每個詢問通過在parent樹上倍增來找到所對應的節點。

對於字尾自動機上每個節點,通過平衡樹啟發式合併來維護他的right集合,之後我們只需要維護$\sum-l_) \cdot (r_-l_)}$即可,然後拆開式子,就是$\sum-r_) \cdot r_}$和$\sum-r_}$。

因為每個詢問的長度不同,又因為我們在上述第二三種情況都需要保證切掉第乙個串,所以我們所需要提取的區間也不同,這個我們直接在平衡樹上亂搞一下就可以了。

之後我們就可以愉快的ac掉這道好毒瘤題啦!

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7

#define n 100500

8#define ll long long

9using

namespace

std;

1011

intn,m;

12char

s[n];

13struct

datad[300500

];17 vector v[n<<1

];18

19#define siz(_) ((!(_))?(0):((_)->size))

20#define tp pair21

struct

treap

33void

pushup()

42if(ch[1

])47

}48 }*root[n<<1

];49

50 treap *merge(treap *a,treap *b)

57else61}

62 tp split(treap *a,int

k)70

else

75return

x;76}77

int getrank(treap *rt,int

x)84}85

void insert(treap *&rt,int

x)95

if(t.second)

101 rt=merge(merge(t.first,now),t.second);

102}

103void dfs(treap *o,treap *&rt)

109int find1(treap *rt,int

x)116

}117

int find2(treap *rt,int

x)124

}125

void query(treap *rt,int x,ll &s1,int &s2)

132else query(rt->ch[0

],x,s1,s2);

133}

134 ll query(int x,int

l)141

int pos1=find1(root[x],r2-l+1

);142

int pos2=find2(root[x],r1+l-2

);143

if(!pos2)pos2=r2;

144 ll sum1=0,sum2=0

;145

int size1=0,size2=0

;146

query(root[x],pos1,sum1,size1);

147query(root[x],pos2,sum2,size2);

148if(pos2>pos1)

153return

ans;

154}

155int last[n],tot,mx[n<<1],ch[n<<1][11],par[n<<1

];156

157void extend(int x,int

c)176

}177 last[x]=np;

178}

179int e=1,head[n<<1

];180

struct

edgeed[n<<1

];183

void add(int u,int

v)187

int fa[n<<1][22

];188

void dfs(int x,int

d)195

}196

int find(int x,int

l)201

void dfs(int

x)207

for(int i=0;i)

211}

212int

main()

224 dfs(1

);225 ll all=1ll*(n-1)*(n-2)/2

;226

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

230return0;

231 }

view code

bzoj5250 2018多省省隊聯測 秘密襲擊

博主蒟蒻,目前還不會動態dp,所以下面說的是乙個並不優秀的暴力,我會補的!我們考慮按權值從大到小依次點亮每個點,相同權值可以同時點亮,每次點亮後,我們進行一次樹形揹包。處理出 f i j 表示i的子樹中有j個亮點的方案數,然後就ac了。有兩個小優化,乙個是將揹包的列舉上限設為min size x k...

bzoj5251 2018多省省隊聯測 劈配

直接網路流模擬即可ac。可持久化 暴力 90分,可持久化 二分 30分,暴力加邊 二分 100分。我也很無奈啊。ivan便漲紅了臉,額上的青筋條條綻出,爭辯道,memcpy也是可持久化 memcpy!oier的事,當然是可持久化!接連便是難懂的話,什麼 可持久化無旋treap套線段樹啟發式合併 什麼...

BZOJ 5251 2018多省省隊聯測 劈配

題目大意 題解 要求最優的錄取方案,網路流。問每個人的排名至少上公升多少才能滿足期望,這個有二分性。二分 網路流判定,沒有加優化所以在某些 上會t。include include include include define pi acos 1 using namespace std struct ...