[AGC024B] Backfront
题面描述
给定一个
1
1
1 到
N
N
N 的排列,通过不断选择该序列中的元素,并将其放到序列的开头或末尾来对其进行排序,求最少需要几次这样的操作才能使得序列有序。可以证明总能通过进行这种操作将排列升序排序。
1
≤
N
≤
2
×
1
0
5
1\le N\le 2\times 10^5
1≤N≤2×105
输入格式

输出格式
打印所需的最小操作数。
样例 #1
样例输入 #1
4
1
3
2
4
样例输出 #1
2
样例 #2
样例输入 #2
6
3
2
5
1
4
6
样例输出 #2
4
样例 #3
样例输入 #3
8
6
3
1
2
7
4
8
5
样例输出 #3
5
提示
Sample Explanation 1

Code
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//堆/优先队列
// #include <queue>//队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <aector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
const ll N=2e5+10;
ll a[N];
void solve()
{
ll n;
cin>>n;
ll ans=0;
for(ll i=0;i<n;i++)
{
ll x;
cin>>x;
a[x]=a[x-1]+1;
ans=max(ans,a[x]);
}
cout<<n-ans<<endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
ll t=1;
//cin>>t;
while(t--) solve();
return 0;
}

被折叠的 条评论
为什么被折叠?



