BZOJ 3673 3674 可持久化並查集

2021-08-03 14:41:24 字數 2248 閱讀 5644

//by richard

#include #include #include #include #include #include #include #define rep(x,y,z) for (int x=(y);(x)<=(z);(x)++)

#define per(x,y,z) for (int x=(y);(x)>=(z);(x)--)

#define log2(x) (31-__builtin_clz(x))

#define mod (int)(1e9+7)

#define inf 0x3f3f3f3f

#define cls(x) memset(x,0,sizeof(x))

#ifdef debug

#define debugdo(x) x

#define debugndo(x)

#define debugout(x) cout<<(#x)<<"="<<(x)typedef long long ll;

/read3.0

template inline void read(t &x)while ((ch<='9'&&ch>='0'))if (flag) x*=-1;}

template inline void read(t &x,t &y)

/variables&functions

int n,m,type,x,y,now,i;

const int maxn=222222;

struct node

; node(node *ll,node *rr):l(ll),r(rr),value(0){}

node(int vv):l(0),r(0),value(vv){}

};char ___[maxn*sizeof(node)*90];

char *____=___;

inline void *myalloc(size_t size)

#define newnode new (myalloc(sizeof(node))) node

struct chairmantree

int mid=(l+r)>>1;

x->l=newnode();

x->r=newnode();

build(x->l,v,l,mid);

build(x->r,v,mid+1,r);

} void _build(node *x,int l=1,int r=n)

int mid=(l+r)>>1;

x->l=newnode();

x->r=newnode();

_build(x->l,l,mid);

_build(x->r,mid+1,r);

} node *insert(node *x,int k,int v,int l=1,int r=n)

int query(node *x,const int &y,int l=1,int r=n)

else

if (l==r) return x->value;

} }}fa,v;

inline int getfa(node *no,const int &x)

while (temp!=before);

return temp;

}inline bool query(const int &x,const int &y)

inline void combine(int x,int y)

int te***=v.query(v.root[i-1],temp1),temp4=v.query(v.root[i-1],temp2);

if (te***>temp4)

fa.root[i]=fa.insert(fa.root[i-1],temp1,temp2);

v.root[i]=v.insert(v.root[i-1],temp2,te***+temp4);

}int lastans;

int main()

else if (type==2)

else

}return 0;

}

自己想了想再加上zyx的指導,我曉得了這玩意就是可持久化陣列,而可持久化陣列就是用可持久化線段樹實現,可持久化線段樹上面的那些結點不用存資料僅僅用來查。再用wuy之前教的奇奇怪怪的記憶體池技巧,我寫出了這份**,感覺還是挺方便的

ps 3673當時明明打炸了,但是卻很快地a了導致我深信自己**沒錯交了3674t飛...最後發現我的啟發式合併是假的...

這是3674的**

BZOJ 3673 3674 可持久化並查集

用可持久化線段樹維護並查集的fa陣列 要按秩合併 好久不寫,有點生疏。修改時都要開新節點,這樣才不會影響之前的版本 include define mid l r 1 define lp tree p l define rp tree p r const int n 2e5 7 struct node...

bzoj 3166 可持久化Tire

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

BZOJ 3166 可持久化Trie

welcome to alo arithmetic and logistic online 這是乙個vr mmorpg 如名字所見,到處充滿了數學的謎題。現在你擁有n顆寶石,每顆寶石有乙個能量密度,記為ai,這些寶石的能量 密度兩兩不同。現在你可以選取連續的一些寶石 必須多於乙個 進行融合,設為 a...