splay的高階題目,有splay的全部操作,然而本蒟蒻竟不自量力地把這道題作為splay的入門題,然後就學(mi)習(man)了乙個星期……
第一次是對著cyc的模版碼的,萬分感謝》<
第二次就自己碼了乙個小時(弱......)
就作為乙個splay學習的模版吧!
#include#includebzoj1500#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;
}
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 內。插入的數字總數不...