牛客提高D3t2 點與面

2022-04-30 06:45:08 字數 1244 閱讀 6954

分析

對於每乙個點只要維護它前面/後面的一小一大組合的數量

對於這個可以維護兩個樹狀陣列

然後從前往後/從後往前分別掃一遍相乘即可

**

#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 數學可以不學嗎,太枯燥了。我想說這個是你在圖形界的立身之本,這些其實並不難,踏下心來看一下,基礎的也那些東西,還是再接再厲吧,堅持是不變的真理!今天來聊一下向量的運算,向量可以和標量 向量 矩陣進行運算,這裡先不談矩陣。負向量 即把向量的每乙個分量變負,且向量加上自身的負向量等...