給你乙個長度為n的全排列
你固定乙個區間翻轉長度k,你每次可以做任意次數的翻轉
更靠右。
要你判斷是否能讓陣列變成公升序,滿足則輸出k
首先k一定是固定的,這應該稍微思考一下就懂
確定了k之後如何判讀是否可以變成公升序全排列是乙個問題
暴力複雜度就是\(o(n^2)\)
而用splay可以優化,但是我不會splay
這個你仔細觀察,只能翻轉固定的長度
而且隊首隊尾的元素都要變化
就應該想到雙端佇列,翻轉用乙個標記即可,具體實現看**
#include#define fi first
#define se second
#define debug cout<<"i am here"}
if(k==0)
int head=n,tail=n-1;
for(int i=1;i<=k;i++)
bool flag=1;
for(int i=1;i<=n;i++)
}else
}if(flag)
head++;
if(i+k<=n)
}else
tail--;
if(i+k<=n)}}
if(pr==0)else
return 0;
}
交換排序 氣泡排序與快速排序
氣泡排序 基本思想 每次比較兩個相鄰的元素,如果它們的順序錯誤就把它們交換過來。核心 for i 1 i n 1 i 快速排序 交換 快速排序 include int a 101 n void quicksort int left,int right 將基準數歸位 a left a i a i te...
交換排序 氣泡排序與快速排序
氣泡排序 廢話不多說,直接上 注意2中冒泡方法的不同。user sqtds date 13 1 15 time 下午3 03 public class bubble public static void swap int array int left int right public static ...
交換排序(氣泡排序與快速排序)
1 氣泡排序 2void bubblesort int array,int n 316 17 18 快速排序動態圖 1 快速排序01 2void insertsort int array,int left,int right 315 swap array i array j 將比樞軸移小的資料移至低...