1. 程式人生 > >#1523 : 陣列重排2

#1523 : 陣列重排2

描述

給定一個1-N的排列A1, A2, ... AN,每次操作小Hi可以選擇一個數,把它放到陣列的最左邊。

請計算小Hi最少進行幾次操作就能使得新陣列是遞增排列的。

輸入

第一行包含一個整數N。

第二行包含N個兩兩不同整數A1, A2, ... AN。(1 <= Ai <= N)

對於60%的資料 1 <= N <= 20

對於100%的資料 1 <= N <= 100000

輸出

一個整數代表答案

樣例輸入
5
2 3 1 4 5
樣例輸出
1

找到很簡單的方法,還是需要想一下。

程式碼:

#include <bits/stdc++.h>

using namespace std;
const int maxn=110000;
int a[maxn];
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    int sum=0;
    int m=n;
    for(int i=n;i>=1;i--)
    {
        if(a[i]==m)
        {
            m--;
            sum++;
        }
        //printf("%d ",dp[i]);
    }
    //cout<<endl;
    printf("%d\n",n-sum);
    return 0;
}