數算實習 k th number 線段樹

2021-08-29 20:49:40 字數 1340 閱讀 6269

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上是否存在蘋果的狀態發生改變。即如果樹杈上有蘋果,那麼卡卡就會...