L3 002 特殊堆疊 30 分

2021-10-21 19:44:51 字數 1689 閱讀 2767

傳送門

用vector模擬堆疊,這裡主要是乙個中位數比較難搞,但是實際上這題的資料不太大,可以直接暴力用vector插入(這裡我查了下vector的insert的複雜度好像是o(n)的,stl會快一點,但是實際還是o(n),如果來組1e5的倒序push感覺是會炸的,最差是1e9

insert(it,x) it是迭代器,配合lower_bound構造的數列是非嚴格遞增的

code:

#include

using

namespace std;

vector<

int> v1, v;

vector<

int>

::iterator it;

intmain()

else

if(op ==

"pop"

) it =

lower_bound

(v.begin()

, v.

end(

), v1[v1.

size()

-1])

; v.

erase

(it)

; cout << v1[v1.

size()

-1]<< endl;

v1.pop_back()

;}else

if(v1.

size()

&1) cout << v[v.

size()

/2]<< endl;

else cout << v[v.

size()

/2-1

]<< endl;}}

return0;

}

正解大概還是樹狀陣列之類的,二分mid作為中位數,樹狀陣列獲取1-x的和的複雜度是logn的,刪除也是logn,二分也是logn,nlognlogn。最差是1e7 實際達不到

code:

#include

using

namespace std;

const

int n =

1e5+10;

int tr[n]

;stack<

int> s;

intlowbit

(int x)

void

update

(int p,

int x)

}int

getsum

(int x)

return res;

}int

searchans()

else

}return ans;

}int

main()

else

if(op ==

"pop"

) cout << s.

top(

)<< endl;

update

(s.top()

,-1)

; s.

pop();

}else

cout <<

searchans()

<< endl;}}

return0;

}

L3 002 特殊堆疊 (30 分)

堆疊是一種經典的後進先出的線性結構,相關的操作主要有 入棧 在堆疊頂插入乙個元素 和 出棧 將棧頂元素返回並從堆疊中刪除 本題要求你實現另乙個附加的操作 取中值 即返回所有堆疊中元素鍵值的中值。給定 n 個元素,如果 n 是偶數,則中值定義為第 n 2 小元 若是奇數,則為第 n 1 2 小元。輸入...

L3 002 特殊堆疊 (30 分

堆疊是一種經典的後進先出的線性結構,相關的操作主要有 入棧 在堆疊頂插入乙個元素 和 出棧 將棧頂元素返回並從堆疊中刪除 本題要求你實現另乙個附加的操作 取中值 即返回所有堆疊中元素鍵值的中值。給定 n 個元素,如果 n 是偶數,則中值定義為第 n 2 小元 若是奇數,則為第 n 1 2 小元。輸入...

L3 002 特殊堆疊 (30 分

l3 002 特殊堆疊 30 分 堆疊是一種經典的後進先出的線性結構,相關的操作主要有 入棧 在堆疊頂插入乙個元素 和 出棧 將棧頂元素返回並從堆疊中刪除 本題要求你實現另乙個附加的操作 取中值 即返回所有堆疊中元素鍵值的中值。給定 n 個元素,如果 n 是偶數,則中值定義為第 n 2 小元 若是奇...