3192 JLOI2013 刪除物品

2022-05-10 03:04:12 字數 1069 閱讀 1470

time limit: 10 sec memory limit: 128 mb

submit: 1366 solved: 794

[submit][status][discuss]

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

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

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

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

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

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

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

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

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

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

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

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

3 3145

2731<=n1+n2<=100000

容易想到對頂棧

但是暴力模擬超時,所以我們直接用樹狀陣列模擬就行了

把第乙個棧反著存,第二個棧接著上乙個正著存,存棧頂位置,每次統計棧頂到最大值距離更新棧頂即可

爆int qaq

#include#include#include#include#define ll long long

using namespace std;

int i,m,n,j,k,a[1000001],c[1000001],z[1000001];

ll ans;

struct vv

d[1000001];

bool cmp(vv a,vv b)

void add(int now,int x)

ll find(int now)

int main()

printf("%lld",ans);

}

3192 JLOI2013 刪除物品

time limit 10 sec memory limit 128 mb submit 977 solved 558 submit status discuss 箱子再分配問題需要解決如下問題 1 一共有n個物品,堆成m堆。2 所有物品都是一樣的,但是它們有不同的優先順序。3 你只能夠移動某堆中位...

3192 JLOI2013 刪除物品

箱子再分配問題需要解決如下問題 1 一共有n個物品,堆成m堆。2 所有物品都是一樣的,但是它們有不同的優先順序。3 你只能夠移動某堆中位於頂端的物品。4 你可以把任意一堆中位於頂端的物品移動到其它某堆的頂端。若此物品是當前所有物品中優先順序最高的,可以直接將之刪除而不用移動。5 求出將所有物品刪除所...

BZOJ3192 JLOI2013 刪除物品

原題位址 自己想的奇葩做法 對於乙個優先順序為x的物品,考察該物品下方優先順序大於x物品的優先順序被分成了多少個連續段 舉個例子,如x 4,該物品下方物品的優先順序有5,6,7,9,10,13,14,19,則段數為4 則該物品需要被移動的次數k 段數 2 優先順序為x 1的物品在該物品下方?1 0 ...