參考部落格
部落格鏈結
網上資料不少,留下自己ac**方便以後回看,用的spt模板是部落格裡的題目鏈結
題意:
求最小的營業額波動總和解法:最小的營業額波動=min(|x-y|),y是之前某天營業額
插入某個數,找前序以及後序即可**:
#include
#include
#include
#include
#include
#include
#include
#include
#define rep(i,n) for(i=0;i#define cle(x) memset(x,0,sizeof(x))
#define ll long long
#define keytree (ch[ ch[root][1] ][0])
const
int maxn=100000+5;
using
namespace
std;
struct splaytree
inline
void splay(int x,int goal) else else }}
if(goal == 0) root = x;
}inline
void newnode(int &x,int c)
inline
void insert(int k)
while(ch[r][val[r]0);
}inline
int getpre(int r)
inline
int getflo(int r)
inline
void work(int n)
if(right)
ans+=(ll)temp;}}
printf("%i64d\n",ans);
}int val[maxn];
}spt;
int main()
return
0;}
題目鏈結
題意:
1:新增優先順序為p的k號機器解法:2:去掉佇列裡優先順序最高的機器
3:去掉佇列裡優先順序最低的機器
2:min=while(ch[root][0]),splay(min,0),並刪掉即可**:3: 類似,伸展後無右子樹
#include
#include
#include
#include
#include
#include
#include
#include
#define rep(i,n) for(i=0;i#define cle(x) memset(x,0,sizeof(x))
#define ll long long
const
int maxn=1000000+5;
using
namespace
std;
#define keytree (ch[ ch[root][1] ][0])
struct splaytree
inline
void splay(int x,int goal) else else }}
if(goal == 0) root = x;
}inline
void newnode(int &x,int c,int p)
inline
void insert(int k,int p)
while(ch[r][val[r]0);
}inline
int getmin(int r)
inline
int getmax(int r)
inline
void work()
else
if(op==3)
else
if(op==2)
else
// debug();}}
int val[maxn];
int ip[maxn];
}spt;
int main()
最後獻上 poj 3468段更新 by notonlysuccess
#include
#include
#include
#include
#include
#include
#include
#include
#define rep(i,n) for(i=0;i#define cle(x) memset(x,0,sizeof(x))
#define ll long long
#define keytree (ch[ ch[root][1] ][0])
const
int maxn=200000+5;
using
namespace
std;
struct splaytree
inline
void splay(int x,int goal) else else }}
push_up(x);
if(goal == 0) root = x;
}inline
void rotateto(int k,int goal) else
push_down(x);
}splay(x,goal);
}inline
void newnode(int &x,int c)
inline
void push_down(int x)
}inline
void push_up(int x)
inline
void maketree(int &x,int l,int r,int f)
inline
void init(int n)
inline
void update()
inline
void query()
int num[maxn];
int val[maxn];
int add[maxn];
ll sum[maxn];
}spt;
int main()
return
0;}
伸展樹模板
include include include include define key value ch ch root 1 0 using namespace std const int maxn 200000 10 char op maxn 10 int opx maxn int s maxn e...
伸展樹模板
給定乙個數n,代表有乙個數列1 n,有下面兩種操作 cut a b c 把區間 a,b 這一段元素切下來接到新序列第c個元素的後面 flip a b 反轉區間 a,b 最後遍歷整個序列 define key val son son root 1 0 typedef long long ll cons...
總結 伸展樹Splay
感覺我在聯賽還差4天的時候學習splay有點慌,但還是要學一下。我們先對splay的陣列進行一些定義 struct nodet n 2 我們的splay應該要支援以下幾個操作 如下 includeusing namespace std const int n 500010 int root,tot ...