這道題貌似很多中做法,我先是用multiset交了一發,然後又寫了一發splay。
multiset做法,這個其實就是二分了,只是用set來保持加入乙個元素時保持有序
1 #includeview code2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include
10 #include 11 #include 12 #include 13 #include 14 #include 15
using
namespace
std;
16 typedef unsigned long
long
ull;
17 typedef long
long
ll;18
const
int inf = 0x3f3f3f3f;19
const
double eps = 1e-8
;20 multisets;
21 multiset::iterator it;
22int main(void)23
46s.insert(x);47}
48 printf("
%d\n
",ans);49}
50return0;
51 }
splay
1 #includeview code2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include
10 #include 11 #include 12 #include 13 #include 14 #include 15
using
namespace
std;
16 typedef unsigned long
long
ull;
17 typedef long
long
ll;18
const
int inf = 0x3f3f3f3f;19
const
double eps = 1e-8
;20 template
21 inline bool scan_d(t &ret)
2236
const
int maxn = 1e5+10;37
int fa[maxn],son[maxn][2
],key[maxn],tot,root;
3839
4041
void addnode(int &r,int father,int
k)42
4849
void rotate(int r,int
kind)
5060
void splay(int r,int
goal)
6168
else
6977
else
7882}83
}84if (goal == 0
)85 root =r;86}
87bool insert(int
k)88
97 r = son[r][k>key[r]];98}
99 addnode(son[r][k>key[r]],r,k);
100 splay(son[r][k>key[r]],0
);101
return
true
;102
}103
int get_pre(int
r)104
112int get_next(int
r)113
121int main(void
)122
142else
143151
}152 printf("
%d\n
",ans);
153}
154return0;
155 }
HNOI2002 營業額統計 Splay
好久沒打過資料結構了哈.把這道題作為splay 的複習題吧,也是個板子.tiger最近被公司公升任為營業部經理,他上任後接受公司交給的第一項任務便是統計並分析公司成立以來的營業情況。tiger拿出了公司的賬本,賬本上記錄了公司成立以來每天的營業額。分析營業情況是一項相當複雜的工作。由於節假日,大減價...
HNOI2002 營業額統計
花了一天鑽研了splay,然後發現splay沒我想象的那麼難 以前都是寫sbt來著 但是splay的速度確實沒那麼快,但是真的挺好寫的 我寫的版本測了這題以後又用了一下別人的splay,發現通過這題大多數splay在750ms上下,我是688ms,說明還算是不錯的啦 啦啦啦 include incl...
HNOI 2002 營業額統計
最近開始重新學習splay樹寫的第一題,基本就是照著別人部落格改的一道題,關於splay樹的模板,感覺大牛已經把 改得很短!這道題沒什麼難度,乙個插入操作,乙個找前驅,乙個找後驅的操作。話說這題有個資料有個bug的地方,可以看連線的discuss 因為沒有push down,push up的操作,感...