CODEVS 資料結構系列 解題報告

2021-06-28 04:01:00 字數 1537 閱讀 3898

用這兩道題學了下splay,也加深了對其的理解。

平衡樹的標記與線段樹的標記不同,在平衡樹中,所有被訪問的節點一定不能有標記;否則將其splay後就找不到其原先的左右子樹了。

**(資料結構1):

#include#include#include#includeusing namespace std;

#include#includestruct ss*null=new ss((ss)),*root;

inline void zig(ss * x,bool d)

inline void splay(ss * x)

root=x;

//cout<<"s:(""data<<"->"datax->x+=a;

x->delta+=a;

}inline void pushdown(ss * x)

}inline ss * find(ss * x,int a)

int n;

inline void prt(ss * x)

char * ptr=(char *)malloc(5000000);

inline int in()

int main());

ss * tmp=root;

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

tmp=tmp->c[1];

}tmp->c[1]=new ss((ss));

int l,r;

while(m--)

}prt(root);

}

**(資料結構2):

#includeusing namespace std;

#include#include#include#includechar * ptr=(char *)malloc(5000000);

inline int in()

struct ss* null=new ss((ss)),* root=new ss((ss));

inline void zig(ss * x,bool w)

inline void splay(ss * x)

root=x;

}#define re(x) x=-x;

inline void paint(ss * x,int b,int c)

x->flagc+=c;

x->x+=c;

//cout<<"paint("}inline void pushdown(ss * x)

}inline ss * find(int a)

pushdown(x);

return x;

}int n;

inline void prt(ss * x)

}int main());

tmp=tmp->c[1];

}tmp->c[1]=new ss((ss));

int l,r;

while(m--)

prt(root);

}

資料結構 解題報告

給乙個長為 n 的 a 定義 n times n 的 b sum limits ra i 兩個操作,修改 a p 為 x 詢問 b 的歷史最小值。我居然把d1t1鴿到d4晚上.歷史最值 kd tree 先離線的把點放到kd tree中 要離散化 然後就是矩形加和單點查詢,打一下歷史最值的標記就好了 ...

排列組合(permutation)系列解題報告

本文解說4道關於permutation的題目 1.permutation 輸出permutation 基礎遞迴 2.permutation sequence 輸出字典序排列的第k個permutation 推理 3.next permutation 給定乙個permutation中的序列,求字典序它的...

資料結構系列( )樹狀結構

樹 是有乙個或乙個以上的節點組成,存在乙個特殊的節點,稱為樹根。每個節點是一些資料和指標組合而成的記錄。除了樹根,其餘節點可分為n 0個互斥的集合,其中每乙個子集合本身也是一種樹狀結構,即此根節點的子樹。此外一棵合法的樹,節點間可以互相連線,但不能形成無出口的迴路。度數 每個節點所有子樹的個數。層數...