k-th number
給定數列a1,a2…an,各不相同。要進行m次查詢,每次查詢 a[l…r] 中第k小的數是什麼 (1 <= n <= 100 000, 1 <= m <= 5 000) abs(ai) <= 10^9
樣例輸入
7 3 //7個數,3次查詢
1 5 2 6 3 7 4
2 5 3
4 4 1
1 7 3
樣例輸出56
3
#include #include using namespace std;
int array[100002]; //array記錄原始陣列
int order[100002]; //order記錄陣列中每個元素對應的編號(從小到大) 離散化
int sorta[100002]; //sorta用來對陣列排序並記錄
int p;
struct tree
;void buildtree(tree* root, int l, int r)
//將order陣列第l到第r個元素,並將其排序後放入store陣列中,方便之後用upper_bound函式進行二分查詢
sort(root->store, root->store + root->len + 1); //對store陣列進行處理
root->left = new tree;
root->right = new tree;
if (l == r) //分解到了最底層
return;
int mid = (l + r) / 2;
buildtree(root->left, l, mid);
buildtree(root->right, mid + 1, r);
}void quary(tree* root, int l, int r, int mid)
else }
}int main()
sort(sorta + 1, sorta + n + 1);
for (int i = 1; i <= n; i++)
tree* root = new tree;
buildtree(root, 1, n);
while (m--)
int mid = (tl + tr) / 2;
while (1)
quary(root, l, r, mid);
if (p >= k)
else
}} return 0;
}
數算實習 LOST COW 線段樹
lost cow 問題描述 一共n頭奶牛編號從1到n,現在它們的排列順序發生了錯亂,對於每頭奶牛,你只知道排在它前面並且編號小於它的奶牛數量。輸入第1行 單個整數,n 表示奶牛的總數 之後n 1行 第k行描述了排在第k 1頭奶牛之前並且編號小於該奶牛編號的奶牛數量。當然,沒有奶牛排在第一頭牛的前面,...
數算實習 Mobile phones 樹狀陣列
mobile phones 描述假設某地區的 移動 基站可以接收手機訊號。該區域為正方形,形成乙個s s大小的矩陣,行和列的編號從0到s 1。每個方塊包含乙個基站。手機內的有源手機數量可能會發生變化,因為手機從可以在方塊間任意移動或開機關機。編寫乙個程式,接收這些報告並回答任何矩形區域中當前活動手機...
數算實習 apple tree 樹狀陣列
輸入 第一行包含乙個整數n n 100,000 這是樹中的樹杈的數量。以下n 1行每個包含兩個整數u和v,這意味著樹杈u和樹杈v通過分支連線。下一行包含的整數m m 100,000 以下m行每行包含乙個資訊,它要麼是 c x 表示在樹杈x上是否存在蘋果的狀態發生改變。即如果樹杈上有蘋果,那麼卡卡就會...