給我們乙個n表示運算元量 然後三種操作
push和pop 還有求中位數的操作
讓我們根據操作輸出正確的解
用sort排序做 或者 map標記法都會超時
考慮更快的方法
如何快速找到給定一串數的中位數
可以去索引 但是需要排序
題目中告訴我們每個元素都小於1e5
那麼也就是說 上下界已知
那麼求中位數 也就是求小於等於某個數的個數正好為所有數的一半
那麼求小於等於某個數的個數 可以用樹狀陣列去記錄
然後查中位數時 在樹狀陣列中二分小於等於的個數mid的元素的下界
樹狀陣列可以用來統計小於等於某元素的數量
#include
using
namespace
std;
/* 樹狀陣列中記錄的是小於當前元素的數量
由於樹狀陣列符合單調性 所以可以二分這個容量的中間值
*/char a[20];
int c[100003];
vector
s;void add(int x,int i)
}int sum(int x)
return ans;
}int find(int md)
return l;
}int main()
printf("%d\n",s[s.size()-1]);
add(s[s.size()-1],-1);
s.pop_back();
}else
if(a[1]=='u') else
int f = s.size()+1>>1;
printf("%d\n",find(f));}}
return
0;}
PAT 甲級 1057 Stack 樹狀陣列
題目大意 在stack的原有功能上增加了peekmedian功能,即排好序後求中位數 push key poppeekmedian 相應操作的值 演算法標籤 樹狀陣列 首先分析為什麼用樹狀陣列。顯然對於pop和push兩種操作無需考慮,在求中位數時候,為了得到中位數,顯然需要排序好的序列才能得到,如...
PAT 甲級真題 1057 Stack
題目鏈結 題解 題目就是求第k小元素問題。由於操作次數比較多,因此直接排序輸出中間元素會超時,因此這題要用到第k小元素的經典做法之一,樹狀陣列。用樹狀陣列來維護現在棧內元素的資訊,然後使用二分查詢中間元素的值。這樣時間複雜度是o n logn o nlogn o nlog n 實現細節見 inclu...
PAT乙級1057 數零壹
時間限制 200 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 給定一串長度不超過105的字串,本題要求你將其中所有英文本母的序號 字母a z對應序號1 26,不分大小寫 相加,得到整數n,然後再分析一下n的二進位制表示中有多少0 多...