分析
我們發現可以把題目轉化為:有乙個序列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...