傳送門
用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 小元 若是奇...