(題面複製於洛谷)
小t有乙個很大的書櫃。這個書櫃的構造有些獨特,即書櫃裡的書是從上至下堆放成一列。她用1到n的正整數給每本書都編了號。
小t在看書的時候,每次取出一本書,看完後放回書櫃然後再拿下一本。由於這些書太有吸引力了,所以她看完後常常會忘記原來是放在書櫃的什麼位置。不過小t的記憶力是非常好的,所以每次放書的時候至少能夠將那本書放在拿出來時的位置附近,比如說她拿的時候這本書上面有x本書,那麼放回去時這本書上面就只可能有x-1、x或x+1本書。
當然也有特殊情況,比如在看書的時候突然**響了或者有朋友來訪。這時候粗心的小t會隨手把書放在書櫃裡所有書的最上面或者最下面,然後轉身離開。
久而久之,小t的書櫃裡的書的順序就會越來越亂,找到特定的編號的書就變得越來越困難。於是她想請你幫她編寫乙個圖書管理程式,處理她看書時的一些操作,以及回答她的兩個提問:(1)編號為x的書在書櫃的什麼位置;(2)從上到下第i本書的編號是多少。
輸入格式:
第一行有兩個數n,m,分別表示書的個數以及命令的條數;第二行為n個正整數:第i個數表示初始時從上至下第i個位置放置的書的編號;第三行到m+2行,每行一條命令。命令有5種形式:
1. top s——表示把編號為s的書房在最上面。
2. bottom s——表示把編號為s的書房在最下面。
3. insert s t——t∈,若編號為s的書上面有x本書,則這條命令表示把這本書放回去後它的上面有x+t本書;
4. ask s——詢問編號為s的書的上面目前有多少本書。
5. query s——詢問從上面數起的第s本書的編號。
輸出格式:
對於每一條ask或query語句你應該輸出一行,乙個數,代表詢問的答案。
輸入樣例#1:
10 101 3 2 7 5 8 10 4 9 6
query 3
top 5
ask 6
bottom 3
ask 3
top 6
insert 4 -1
query 5
query 2
ask 2
輸出樣例#1:
299753
100%的資料,n,m <= 80000
首先我們splay平衡條件為當前元素插入順序,插入順序的關係為lson然後多開乙個陣列pos記錄序號所代表的樹上的位置。
剩下的正常splay就行了。
ps2:top(x)操作基本上是:
1.將xsplay。
2.找到它後面編號的點y,刪掉x,將y作為新的假根節點。
3.將y作為x的右兒子(將x重新新增回來)。
顯然bottom操作和他基本類似。
又顯然ins也類似。
又顯然其他操作很顯然。
#include#include#include
#include
#include
#include
#include
using
namespace
std;
const
int n=80001
;inline
intread()
while(isdigit(ch))x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
return w?-x:x;
}int fa[n],tr[n][2
],key[n],size[n],pos[n];
introot,sz,n,m;
inline
bool
get(int
x)inline
void update(int
x)
return;}
inline
void rotate(int
x)inline
void splay(int
x) root=x;
return;}
inline
void insert(int
v)
return;}
inline
int find(int x,int
v)inline
void top(int
x)
return;}
inline
void bottom(int
x)
return;}
inline
void ins(int x,int
t)inline
int ask(int
x)inline
int query(int
x)inline
char
getc()
intmain()
for(int i=1;i<=m;i++)
if(ch=='
a')printf("
%d\n
",ask(read()));
if(ch=='
q')printf("
%d\n
",query(read()));
}return0;
}
刷題總結 書架(bzoj1861)
小t有乙個很大的書櫃。這個書櫃的構造有些獨特,即書櫃裡的書是從上至下堆放成一列。她用1到n的正整數給每本書都編了號。小t在看書的時候,每次取出一本書,看完後放回書櫃然後再拿下一本。由於這些書太有吸引力了,所以她看完後常常會忘記原來是放在書櫃的什麼位置。不過小t的記憶力是非常好的,所以每次放書的時候至...
BZOJ1003 ZJOI 物流運輸
物流公司要把一批貨物從碼頭a運到碼頭b。由於貨物量比較大,需要n天才能運完。貨物運輸過程中一般要轉停好幾個碼頭。物流公司通常會設計一條固定的運輸路線,以便對整個運輸過程實施嚴格的管理和跟蹤。由於各種因素的存在,有的時候某個碼頭會無法裝卸貨物。這時候就必須修改運輸路線,讓貨物能夠按時到達目的地。但是修...
ZJOI2007 BZOJ1059 矩陣遊戲
description 第一行包含乙個整數t,表示資料的組數。接下來包含t組資料,每組資料第一行為乙個整數n,表示方陣的大小 接下來n行為乙個n n的01矩陣 0表示白色,1表示黑色 output 輸出檔案應包含t行。對於每一組資料,如果該關卡有解,輸出一行yes 否則輸出一行no。sample i...