题意:大概就是给你一些数字,这些数字都是属于1-n不重复,每次排序,只能把一个数字放在最前面或者是最后面问你最少多少次能把他们排成升序?
思路:就是你要考虑那一些数字不用排序,当然是那种 连续上升的数,必须是相差1的那种上升序列,这种的就不用排了
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<string>
#include<iomanip>
#include<vector>
#include<fstream>
#include<algorithm>
using namespace std;
typedef long long ll; int b[100001];
int s[1000001];
int main()
{
memset(s, 0, sizeof s);
int n; cin >> n;
for (int i = 1; i <= n; i++)
cin >> b[i];
for (int i = 1; i <= n; i++)
{
s[b[i]] = s[b[i] - 1] + 1;
}
int maxx = 0;
for (int i = 1; i <= n; i++)
maxx = max(maxx, s[i]);
cout << n - maxx << endl;
}
很巧妙啊 用一个数组下标来找他的前一个数!