牛牛與交換排序 題解 雙端佇列模擬區間反轉

2022-06-10 10:00:11 字數 694 閱讀 6780

給你乙個長度為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 將比樞軸移小的資料移至低...