bzoj1500 維修數列 splay

2022-05-20 08:27:27 字數 1362 閱讀 1706

splay的高階題目,有splay的全部操作,然而本蒟蒻竟不自量力地把這道題作為splay的入門題,然後就學(mi)習(man)了乙個星期……

第一次是對著cyc的模版碼的,萬分感謝》<

第二次就自己碼了乙個小時(弱......)

就作為乙個splay學習的模版吧!

#include#include

#include

#include

const

int maxn=5e5+10,inf=0x3f3f3f3f

;using

namespace

std;

intn,m,root,a[maxn],a[maxn];

intg[maxn],en[maxn],r[maxn],l[maxn],m[maxn],sum[maxn],s[maxn];

int t[maxn][2

],f[maxn];

queue

q;intread()

while(c>='

0'&&c<='9')

return ans*f;

}void count(int

x)void pushdown(int

x)

if(en[x])

if(t[x][1

])

en[x]=0

; }

}void rotate(int

x)void splay(int x,int

r)

int x=x==t[f[x]][1],y=f[x]==t[f[f[x]]][1

];

if(x^y)rotate(x),rotate(x);

else

rotate(f[x]),rotate(x);

}}int node(int fa,int

num)

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

r)void find(int &x,int

k)

if(k==s[t[i][0]]+1)

k-=s[t[i][0]]+1;i=t[i][1

]; }

}void

insert()

void erase(intx)}

void

del()

void

cover()

void

turn()

void

get_sum()

void

get_m()

intmain()

return0;

}

bzoj1500

BZOJ 1500, 維修數列

傳送門 編寫乙個支援插入 刪除 修改 翻轉 求和以及求和最大子串行的資料結構。splay無疑。但是寫太醜也是會tle的,比方說插入的時候應該以建樹的形式插入,而不是乙個點乙個點的形式。實現起來要注意的細節很多,對練習打splay挺有好處。陸陸續續除錯了好多天,總算在崩潰之前ac了 include c...

BZOJ 1500 維修數列

time limit 10 sec memory limit 64 mb submit 14433 solved 4701 submit status discuss 輸入的第1 行包含兩個數n 和m m 20 000 n 表示初始時數列中數的個數,m表示要進行的運算元目。第2行包含n個數字,描述初...

bzoj 1500 維修數列

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