牛客提高D1t2 最小生成鏈

2022-04-30 06:45:09 字數 1016 閱讀 1084

分析

我們發現可以把題目轉化為:有乙個序列a,問它的排列中相鄰兩個值異或的最大值的最小值

我們發現序列的構成一定是前幾位全是一樣的

從某一位開始左面全是0右面全是1

所以只要找到一種方案是的交界兩個值異或最小即可

把是0的插入01trie,每次拿是1的查詢異或最小值

**

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

int n,m,sum[60000100][2],trie[60000100][2

],cnt;

long

long a[1000100

],res,ans;

inline

void q(long

long

x)else p=trie[p][wh^1],res|=(1ll<}

return;}

inline

void ins(long

long

x)

return;}

signed main()

}for(i=59;i>=0;i--)

for(i=1;i<=n;i++)

if(!((1llfor(i=1;i<=n;i++)

if((1llif(pl==-1)puts("0"

);

else printf("

%lld\n

",ans);

return0;

}

暑假 D1 T2 咖啡的藝術

掃瞄線 事件點 0集合 描述了每一種咖啡的溫度區間 l,r l 1 r 1 1 1集合 描述了每乙個查詢區間 l,r l i r 1 i top記錄n集合的差分字首和 now記錄q集合的差分字首和。構造好事件點後按l r 排一遍序 按順序往後掃。if cnt1 k ans 區間長度 i includ...

牛客提高D6t2 破碎的序列

分析 我們不難發現對於偶數的情況只要相鄰兩個數不相等即可 而對於奇數的情況只要中間恰好隔乙個數的兩個數不相等即可 於是我們又dp i 0 1 表示考慮到第i位,這一位和它後面離它最近的乙個確定的數是否相等 每次從i 1轉移即可 注意對於奇數的情況最終答案要n 1和n的dp值相乘以保證合法 inclu...

牛客提高D3t2 點與面

分析 對於每乙個點只要維護它前面 後面的一小一大組合的數量 對於這個可以維護兩個樹狀陣列 然後從前往後 從後往前分別掃一遍相乘即可 include include include include include include include include include include incl...