題解 NOI2015 維修數列

2022-02-15 23:12:46 字數 1210 閱讀 5773

使用平衡樹維護乙個數列,支援插入,修改,刪除,翻轉,求和,求最大和這 \(6\) 個操作.

splay 裸題,幾乎各種操作都有了,這個**就發給大家當個模板吧.

最後求最大和的時候可以事先維護好最大和,然後輸出即可。

#include #include #include #include #define maxn 1000001

using namespace std;

inline int read()

while ('0' <= c && c <= '9')

if (f)

return x;

}int stack[maxn], top, v[maxn];

struct splay

void rev_tag(int x)

void pushdown(int x)

if (mark[x])

}

void updata(int x)

int get()

void build(int fa, int l, int r, int& x)

build(x, l, mid - 1, ls(x));

build(x, mid + 1, r, rs(x));

updata(x);

}

void init(int n)

void move(int x)

void splay(int x)

root = x;

}

int find(int x, int i)

void insert()

void reuse(int x)

void del()

void cover()

void reverse()

void query_sum()

void query_max()

} splay;

int main()

if (ss[0] == 'd')

if (ss[0] == 'm' && ss[2] == 'k')

if (ss[0] == 'r')

if (ss[0] == 'g')

if (ss[0] == 'm' && ss[2] == 'x')

} return 0;

}

NOI 2005 維修數列

noi 2005 維修數列 典型的伸展樹模板題 參考 include include include include include using namespace std define key value ch ch root 1 0 const int maxn 500010 const int...

NOI2005 維修數列

輸入的第1 行包含兩個數n 和m m 20 000 n 表示初始時數列中數的個數,m表示要進行的運算元目。第2行包含n個數字,描述初始時的數列。以下m行,每行一條命令,格式參見問題描述中的 任何時刻數列中最多含有500 000個數,數列中任何乙個數字均在 1 000,1 000 內。插入的數字總數不...

1500 NOI2005 維修數列

題目思路 splay 包括區間插入,區間刪除,記憶體,區間反轉,區間和,區間最大子段,成段更新等操作。include include include include include include include include include include includeusing namesp...