2104 刪除物品 樹狀陣列

2021-08-07 01:37:22 字數 1142 閱讀 6433

2104 刪除物品

題目描述 description

箱子再分配問題需要解決如下問題:

(1)一共有n個物品,堆成m堆。

(2)所有物品都是一樣的,但是它們有不同的優先順序。

(3)你只能夠移動某堆中位於頂端的物品。

(4)你可以把任意一堆中位於頂端的物品移動到其它某堆的頂端。若此物品是當前所有物品中優先順序最高的,可以直接將之刪除而不用移動。

(5)求出將所有物品刪除所需的最小步數。刪除操作不計入步數之中。

(6)只是乙個比較難解決的問題,這裡你只需要解決乙個比較簡單的版本:

不會有兩個物品有著相同的優先順序,且m=2

輸入描述 input description

第一行是包含兩個整數n1,n2分別表示兩堆物品的個數。

接下來有n1行整數按照從頂到底的順序分別給出了第一堆物品中的優先順序,數字越大,優先順序越高。

再接下來的n2行按照同樣的格式給出了第二堆物品的優先順序。

輸出描述 output description

對於每個資料,請輸出乙個整數,即最小移動步數。

樣例輸入 sample input

3 3145

273樣例輸出 sample output

6資料範圍及提示 data size & hint

對於20%的資料有1<=n1+n2<=100

對於40%的資料有1<=n1+n2<=1000

對於全部資料,有1<=n1+n2<=100000

//樹狀陣列, 注意精度(long long) 

#include#include#include#includeusing namespace std;

const int mn=100020;

int tree[mn*2],n1,n2,n;

struct node

return cnt;

}int main()

for(int i=n1+2;i<=n;++i)

sort(a,a+k--);

long long ans=0;

int p=n1+1;

while(k>0)

printf("%lld\n",ans);

return 0;

}

2104 子陣列範圍和

給你乙個整數陣列 nums nums 中,子陣列的 範圍 是子陣列中最大元素和最小元素的差值。返回 nums 中 所有 子陣列範圍的 和 子陣列是陣列中乙個連續 非空 的元素序列。import j a.util.arraydeque import j a.util.deque class solut...

樹狀陣列1 樹狀陣列入門

仔細看一下,發現tree的每乙個節點的高度並不是隨意的,而是由它轉成二進位制之後末尾連續零的數量決定的,連續零的數量加1,就是高度,例如 3 11 零的數量為0,加1等於1,所以它的高度就是1 6 110 零的數量為1,加1等於2,所以它的高度就是2 8 1000 零的數量為3,加1等於4,所以它的...

樹狀陣列 瞎bb 樹狀陣列

樹狀陣列是乙個利用一維陣列和位運算組成的求解區間問題的高效資料結構,其構造如圖所示 首先,我們要用它解決單點修改 區間查詢的操作。根據這張圖我們建立乙個陣列bit,下標就是圖中顯示的十進位制數。bit i 就表示了圖中所示的一段區間的和,例如bit 6 sum 5,6 bit 4 sum 1,4 下...