用雜湊,把push的數x作為下標給hashtable(實則不存在,直接用tree樹狀陣列記錄資料)+1,pop則是以最後乙個數x作為下標-1 。
樹狀陣列和其原理不再贅述,需要注意的是最後的二分搜尋(實則是lower_bound)中位數。
#include #include#include
#include
#include
#include
#include
#include
#include
#include
#include
#define i scanf
#define ol puts
#define o printf
#define f(a,b,c) for(a=b;a#define ff(a,b) for(a=0;a#define fg(a,b) for(a=b-1;a>=0;a--)
#define len 100010
#define max (1<<30)+1
#define v vectorusing
namespace
std;
inttree[len];
int lowbit(int
x)int getsum(int
p)
return
sum;
}void update(int p,intx)}
char buf[100
];stack
s;void
peekmedian()
else}o(
"%d\n
",l);
}int
main()
}else
if(strcmp(buf,"
push
")==0
)else
}return0;
}
PAT 甲級 1057 Stack 樹狀陣列
題目大意 在stack的原有功能上增加了peekmedian功能,即排好序後求中位數 push key poppeekmedian 相應操作的值 演算法標籤 樹狀陣列 首先分析為什麼用樹狀陣列。顯然對於pop和push兩種操作無需考慮,在求中位數時候,為了得到中位數,顯然需要排序好的序列才能得到,如...
pat 1057 Stack 樹狀陣列 二分查詢
給我們乙個n表示運算元量 然後三種操作 push和pop 還有求中位數的操作 讓我們根據操作輸出正確的解 用sort排序做 或者 map標記法都會超時 考慮更快的方法 如何快速找到給定一串數的中位數 可以去索引 但是需要排序 題目中告訴我們每個元素都小於1e5 那麼也就是說 上下界已知 那麼求中位數...
樹狀陣列1 樹狀陣列入門
仔細看一下,發現tree的每乙個節點的高度並不是隨意的,而是由它轉成二進位制之後末尾連續零的數量決定的,連續零的數量加1,就是高度,例如 3 11 零的數量為0,加1等於1,所以它的高度就是1 6 110 零的數量為1,加1等於2,所以它的高度就是2 8 1000 零的數量為3,加1等於4,所以它的...