3192 JLOI2013 刪除物品

2021-07-28 09:33:18 字數 2028 閱讀 3722

time limit: 10 sec  

memory limit: 128 mb

submit: 977  

solved: 558 [

submit][

status][

discuss]

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

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

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

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

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

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

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

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

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

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

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

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

3 314

5273

61<=n1+n2<=100000

[submit][

status][

discuss]

題目扯了很長,但是有用的只有那幾句話。。。

根據規則,每次能刪除的物品一定是當前局面權值最大的

那麼找到那個物品,把在它上面的物品全部搬到另乙個堆就行了

移動方法也是唯一的。。。。。

這等於是刪除序列,合併序列,翻轉序列同時存在。。。。

用splay可以維護所有操作~(我真的這麼寫了。。)

然後一搜題解。。。。樹狀陣列就行了。。。。。。。。。。。

把兩個堆堆頂對著堆頂擺好。。。剩下就。。。。

#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

const int maxn = 1e5 + 10;

const int inf = ~0u>>1;

typedef long long ll;

int n1,n2,rt1,rt2,cnt,tp,now,fa[maxn],a[maxn],b[maxn],max[maxn]

,key[maxn],rev[maxn],ch[maxn][2],stk[maxn],siz[maxn];

ll ans;

void pushdown(int x)}

void maintain(int x)

void rotate(int x)

void splay(int x,int &rt)

int search(int x,int k)

if (max[ch[x][0]] == k) return search(ch[x][0],k);

else }

int left(int x)

void merge(int &rt,int g)

int build_a(int l,int r)

int build_b(int l,int r)

int getint()

while ('0' <= ch && ch <= '9')

ret = ret * 10 + ch - '0',ch = getchar();

return ret * a;}

int main()

else

}cout << ans << endl;

return 0;

}

3192 JLOI2013 刪除物品

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

3192 JLOI2013 刪除物品

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

BZOJ3192 JLOI2013 刪除物品

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