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...