BZOJ1251 序列終結者 Splay

2021-07-25 04:30:30 字數 1158 閱讀 2624

好累,一天寫了三棵樹

splay區間翻轉、區間加法、區間求最大值

還是要記得注意邊界條件,tr[0] = a[0] = mx[0] = -inf

誒下午物理考齪了估計要被老師切死

#include #include #include #define ls s[t][0]

#define rs s[t][1]

#define inf (1<<30)

#define n 200050

using namespace std;

int a[n],siz[n],tr[n],fa[n],s[n][2],d[n],mx[n],rev[n],ag[n];

int rt,cnt,n,m;

inline void update(int t)

void rot(int x,int &k)

s[y][l] = s[x][r]; s[x][r] = y;

fa[x] = z; fa[y] = x; fa[ s[y][l] ] = y;

update(y); update(x);

}void pdd(int t)

if (s[t][0]) mx[ls] += ag[t] , tr[ls] += ag[t] , ag[ls] += ag[t];

if (s[t][1]) mx[rs] += ag[t] , tr[rs] += ag[t] , ag[rs] += ag[t];

ag[t] = 0;

return ;

}stacksta;

void access(int x,int k)

while (!sta.empty())

}void splay(int x,int &k)

rot(x,k); }}

void build(int l,int r,int &t,int f)

int kth(int k,int t)

void solve()

if (cmd == 2) rev[t] ^= 1;

if (cmd == 3) printf("%d\n",mx[t]);

update(u); update(v);

} return ;

}int main()

bzoj 1251 序列終結者

題目在這裡 這應該是splay裸題了吧。對於每個節點儲存5個值,size,max,flag,lazy,val 分別表示這個節點的子樹大小,子樹的最大值,子樹是否有打過翻轉標記,子樹的增加的值,前面的所有都包括這個節點它自己 以及這個節點的當前值。對於一段區間 l,r 的詢問 修改,只需把l 1這個節...

bzoj1251 序列終結者

time limit 20 sec memory limit 162 mb submit 2971 solved 1188 submit status discuss 網上有許多題,就是給定乙個序列,要你支援幾種操作 a b c d。一看另一道題,又是乙個序列 要支援幾種操作 d c b a。尤其是...

BZOJ 1251 序列終結者

網上有許多題,就是給定乙個序列,要你支援幾種操作 a b c d。一看另一道題,又是乙個序列,要支援幾種操作 d c b a。尤其是我們這裡的某人,出模擬試題,居然還出了一道這樣的,真是沒技術含量 這樣,我也出一道題,我出這一道的目的是為了讓大家以後做這種題目有乙個 庫 可以依靠,沒有什麼其他的意思...