分析
對於每乙個點只要維護它前面/後面的一小一大組合的數量
對於這個可以維護兩個樹狀陣列
然後從前往後/從後往前分別掃一遍相乘即可
**
#include#include#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define int long long
const
int mod = 998244353
;#define add(x,y) x=(x+y)%mod
#define del(x,y) (x-y+mod)%modinline
int lb(int x)
int a[1000100],b[1000100],sum1[100100],sum2[100100],h[100100
],n,m;
inline
void add_a(int x,int k)
inline
void add_b(int x,int k)
inline
int q_a(int x)
inline
int q_b(int x)
signed main()
memset(a,
0,sizeof
(a));
memset(b,
0,sizeof
(b));
for(i=1;i<=n;i++)
memset(a,
0,sizeof
(a));
memset(b,
0,sizeof
(b));
for(i=n;i>0;i--)
int ans=0
;
for(i=1;i<=n;i++)
ans=(ans+1ll*sum1[i]*sum2[i]%mod)%mod;
cout
<"\n"
;
return0;
}
牛客提高D6t2 破碎的序列
分析 我們不難發現對於偶數的情況只要相鄰兩個數不相等即可 而對於奇數的情況只要中間恰好隔乙個數的兩個數不相等即可 於是我們又dp i 0 1 表示考慮到第i位,這一位和它後面離它最近的乙個確定的數是否相等 每次從i 1轉移即可 注意對於奇數的情況最終答案要n 1和n的dp值相乘以保證合法 inclu...
牛客提高D1t2 最小生成鏈
分析 我們發現可以把題目轉化為 有乙個序列a,問它的排列中相鄰兩個值異或的最大值的最小值 我們發現序列的構成一定是前幾位全是一樣的 從某一位開始左面全是0右面全是1 所以只要找到一種方案是的交界兩個值異或最小即可 把是0的插入01trie,每次拿是1的查詢異或最小值 include include ...
3D Math 3D 數學 向量與點2
最近有粉絲反應,3d 數學可以不學嗎,太枯燥了。我想說這個是你在圖形界的立身之本,這些其實並不難,踏下心來看一下,基礎的也那些東西,還是再接再厲吧,堅持是不變的真理!今天來聊一下向量的運算,向量可以和標量 向量 矩陣進行運算,這裡先不談矩陣。負向量 即把向量的每乙個分量變負,且向量加上自身的負向量等...