字尾自動機挺好毒瘤的題。
我們考慮哪些切點是不合法的。肯定是所有的匹配串都被切了。
我們考慮第乙個切口的位置。
當第乙個切口在第乙個出現位置前時,第二個切口必須切掉所有的串。
當第乙個切口在$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 7view code#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 }
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 ...