HihoCoder - 1523 陣列重排2
阿新 • • 發佈:2018-11-02
給定一個1-N的排列A1, A2, ... AN,每次操作小Hi可以選擇一個數,把它放到陣列的最左邊。
請計算小Hi最少進行幾次操作就能使得新陣列是遞增排列的。
Input
第一行包含一個整數N。
第二行包含N個兩兩不同整數A1, A2, ... AN。(1 <= Ai <= N)
對於60%的資料 1 <= N <= 20
對於100%的資料 1 <= N <= 100000
Output
一個整數代表答案
Sample Input
5 2 3 1 4 5
Sample Output
1
題解:因為是把數往前拿,所以原序列從後往前,按順序排好的都不動,在吧需要動的從打到小拿即可
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; const int N=100100; int n; int a[N]; int main() { while(~scanf("%d",&n)) { for(int i=1;i<=n;i++)scanf("%d",&a[i]); int cnt=n,ans=0; for(int i=n;i>=1;i--) { if(a[i]==cnt) { cnt--; ans++; } } cout<<n-ans<<endl; } return 0; }