樹狀陣列 1057

2022-05-02 04:15:10 字數 976 閱讀 3606

用雜湊,把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,所以它的...