BZOJ 3166 可持久化Trie

2022-03-27 05:57:03 字數 1459 閱讀 4940

welcome to alo ( arithmetic and logistic online)。這是乙個vr mmorpg ,

如名字所見,到處充滿了數學的謎題。

現在你擁有n顆寶石,每顆寶石有乙個能量密度,記為ai,這些寶石的能量

密度兩兩不同。現在你可以選取連續的一些寶石(必須多於乙個)進行融合,設為  ai, ai+1, …, a j,則融合而成的寶石的能量密度為這些寶石中能量密度的次大值

與其他任意一顆寶石的能量密度按位異或的值,即,設該段寶石能量密度次大值

為k,則生成的寶石的能量密度為max。 

現在你需要知道你怎麼選取需要融合的寶石,才能使生成的寶石能量密度最大。 

第一行,乙個整數 n,表示寶石個數。 

第二行, n個整數,分別表示a1至an,表示每顆寶石的能量密度,保證對於i ≠ j有 ai ≠ aj。 

輸出一行乙個整數,表示最大能生成的寶石能量密度。 

59 2 1 4 7

14可以列舉次大值,那麼它能覆蓋的範圍如圖。

紅色為列舉到的次大值,黑色為大於它的值,其餘為小於它的值。

它做多能覆蓋的兩個區間如圖。

這要在這些區間中查詢即可。

對權值排序完後用set維護就好了。

#include #include #include #include #include using namespace std;

const int inf = 1<<30;

const int maxn = 50005;

int n,ans;

std::setq;

templateinline _t read()

struct data

}a[maxn];

struct tree*null,*mempool,*c,*root[maxn];

void* tree :: operator new(size_t,tree *ls,tree *rs,int size)

c->ch[0]=ls;c->ch[1]=rs;c->s=size;

return c++;}

tree* insert(tree *old,int x,int full=inf)

int query(tree *old,tree *now,int x,int full=inf)

int main()

std::sort(&a[1],&a[n+1]);

q.insert(-1);q.insert(-2);q.insert(-3);

q.insert(n+1);q.insert(n+2);q.insert(n+3);

q.insert(a[1].pos);

for(int i=2;i<=n;i++)

printf("%d\n",ans);

}

bzoj 3166 可持久化Tire

每乙個數能做出的貢獻就是其兩端第二個比他大的中間的數和他的異或值 按權值大小排序,按照位置扔進set,set內的元素都是比他大的,也是全的 然後tire上跑就行了。include include include include include include define n 50050 using...

BZOJ 3261 最大異或和 可持久化Trie樹

題目大意 給定乙個序列,提供下列操作 1.在陣列結尾插入乙個數 2.給定l,r,x,求乙個l p r,使x a p a p 1 a n 最大 首先我們可以維護字首和 然後就是使x sum n sum p 1 最大 x sum n 為定值,於是用trie樹貪心即可 考慮到l 1 p 1 r 1,我們不...

BZOJ3261 最大異或和 可持久化trie

可持久化 這個詞含義還真多 其實可持久化trie實際上就是主席trie bzoj3261傳送門 給定乙個非負整數序列 初始長度為 n。有 m個操作,有以下兩種操作型別 1 a x 新增操作,表示在序列末尾新增乙個數 x,序列的長度 n 1。2 q l r x 詢問操作,你需要找到乙個位置 p,滿足 ...