使用平衡樹維護乙個數列,支援插入,修改,刪除,翻轉,求和,求最大和這 \(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...