摘要:
```cpp #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<cstdlib> #include<climits> #include<stack> #include<vector> # 阅读全文
摘要:
#include #include #include #include #include #include #include #include #include #include #include #include //#include #include #include #include<unor 阅读全文
摘要:
概率就是组合数分之一,现在需要求组合数有多少。 因为是排列,每一次长度加1,就是第i个插入的过程,考虑 $dp[i][j][k]$表示第$i$个数字插入到$k$的位置,\(逆序数是j\)。 分段转移(因为超级逆序数表示$a_I>a_j+1$): 当$i-1<k$的时候,有$dp[i][j][k]=\ 阅读全文
摘要:
可以很显然的发现,答案等于$\sum{dist_{i,root}}-all(lca(l,l+1,l+2,,,,r))$其中 我们可以使用线段树取$[l,r]lca$。 每一个点到根的和,我们考虑先离线,再$access$过程。每一次打通一条链,就要把这条链上,已经遍历过的点到该链的链头的距离给剪掉。 阅读全文
摘要:
#include #include #include #include #include #include #include #include #include #include #include #include //#include #include #include #include<unor 阅读全文
摘要:
#include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<cstdlib> #include<climits> #include<stack> #include<vector> #include 阅读全文
摘要:
令 \(dp[i][x]\) 表示 $j(j<i)\(&&\)(j+a_j>=i)$是到$i$唯一途径,且往后能覆盖到$x$$(x>=i)$ 即唯一通过$j$跳转到$i$节点,且$j$往后能跳转到至多$i+x$。 又由于路径具有唯一性,并且总是存在。我们总可以找到一个唯一节点跳转到当前节点。 转移方 阅读全文
摘要:
#include #include #include #include #include #include #include #include #include #include #include #include //#include #include #include #pragma GCC o 阅读全文
摘要:
#include #include #include #include #include #include #include #include #include #include #include #include //#include #include #include #pragma GCC o 阅读全文
摘要:
#include #include #include #include #include #include #include #include #include #include #include #include //#include #include #include #pragma GCC o 阅读全文