jzoj5947 初音未來

2021-08-30 17:55:00 字數 864 閱讀 3189

hercier作為一位喜愛hatsune miku的oier,痛下決心,將vocaloid買回了家。開啟之後,你發現介面是乙個長為n的序列,代表音調,並形成了全排列。你看不懂日語,經過多次嘗試,你只會用乙個按鈕:將一段區間按公升序排序。不理解**的hercier決定寫乙個指令碼,進行m次操作,每次對一段區間進行操作。可惜hercier不會寫指令碼,他找到了在機房裡的你,請你模擬出最後的結果。

看到暴力有七十分還想什麼(●』◡』●)

考慮記錄所有相鄰的逆序對。區間排序本質是交換相鄰位置使得區間內不存在逆序對,那麼我們用set記錄一下所有的相鄰逆序對,每次二分出區間內最靠左端點的相鄰逆序對交換,然後判斷是否產生了新的相鄰逆序對即可

由於長度為n的排列逆序對是o(n2)級別的,因此複雜度為(n2+m)logn

#include

#include

#include

#include

#define rep(i,st,ed) for (int i=st;i<=ed;++i)

const

int n=

20005

;std:: set <

int> set;

int a[n]

;int

read()

intmain

(void

)for

(;m--;)

}rep

(i,l,r)

printf

("%d "

, a[i]);

return0;

}

594 最長和諧子串行

題目描述 和諧陣列是指乙個陣列裡元素的最大值和最小值之間的差別正好是1。現在,給定乙個整數陣列,你需要在所有可能的子串行中找到最長的和諧子串行的長度。示例 1 輸入 1,3,2,2,5,2,3,7 輸出 5 原因 最長的和諧陣列是 3,2,2,2,3 說明 輸入的陣列長度最大不超過20,000.方法...

594 最長和諧子串行

和諧陣列是指乙個陣列裡元素的最大值和最小值之間的差別正好是1。現在,給你乙個整數陣列nums,請你在所有可能的子串行中找到最長的和諧子串行的長度。陣列的子串行是乙個由陣列派生出來的序列,它可以通過刪除一些元素或不刪除元素 且不改變其餘元素的順序而得到。示例 1 輸入 nums 1,3,2,2,5,2...

594 最長和諧子串行

和諧陣列是指乙個陣列裡元素的最大值和最小值之間的差別正好是1。現在,給定乙個整數陣列,你需要在所有可能的子串行中找到最長的和諧子串行的長度。示例 1 輸入 1,3,2,2,5,2,3,7 輸出 5 原因 最長的和諧陣列是 3,2,2,2,3 1 import j a.util.hashmap 2im...