從後往前插生成指定序列最少運算元

2021-09-17 01:14:41 字數 781 閱讀 7697

acm:

題目:給定兩個 1 ∼n 的排列 a 和 b。定義一種操作:每次可以取出 a的最後乙個數,然後插入到 a 的任意乙個位置(任意兩個數中間或者最前面)。

現在要把 a 轉化為 b,問最少需要幾次操作

ps:這道題wa了無數遍,一次次嘗試終於嘗試出正確做法....

解法:我們可以知道如果前面的排亂了,那麼最後面的數無論怎麼排都得往前修改。

那麼好了,我們只需要知道前面的序列最長的沒排亂的序列的長度是多少就行

也就是說我們需要找到包含第乙個數的連續上公升(大小以另外的序列為基準)序列,

這段序列是不需要往前插的,然後後面的序列往前插到正確的位置即可

#include

#define ll long long

#define fo(i,j,n) for(register int i=j; i<=n; ++i)

using

namespace std;

const

int n=

200005

;int n;

int a[n]

,b[n]

,aidx[n]

,bidx[n]

,sum[n]

;int

main()

fo(i,

1,n)

int ans=1;

fo(i,

2,n)

else

} cout

}

tableView從後往前傳值

建立乙個secondviewcontroller 在.h檔案中宣告協議 secondviewcontroller 宣告協議 protocol secondviewcontrollerdelegate void changvalue nsstring value end 設定 人屬性 inte ce ...

技 從後往前翻 Linux less

參考鏈結 如想看dbg.log,則 使用less dbg.log 然後就可以當成vim的操作了 第一步 開啟日誌檔案 less dbg.log 第二步 定位到日誌檔案的最後一行 shift g移動到最後一行 第三步 使用 關鍵字 搜尋,按shift n往上搜尋。或者使用?關鍵字從末尾開始搜尋,直接按...

關於從後往前擷取字串的方法

substring方法將返回乙個包含從 start 到最後 不包含 end 的子字串的字串。substring方法使用 start 和 end 兩者中的較小值作為子字串的起始點。例如,strvar.substring 0,3 和 strvar.substring 3,0 將返回相同的子字串。如果 s...