一个数组的元素为1至N的整数,现在要对这个数组进行排序,在排序时只能将元素放在数组的头部或尾部,问至少需要移动多少个数字,才能完成整个排序过程?
例如:
2 5 3 4 1 将1移到头部 =>
1 2 5 3 4 将5移到尾部 =>
1 2 3 4 5 这样就排好了,移动了2个元素。
给出一个1-N的排列,输出完成排序所需的最少移动次数。
Input
第1行:1个数N(2 <= N <= 50000)。 第2 - N + 1行:每行1个数,对应排列中的元素。
Output
输出1个数,对应所需的最少移动次数。
Input示例
5 2 5 3 4 1
Output示例
2
找出最长的等差数列,公差为1.。。。其余数打最大的往下放,最小的往上放即可
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=50000+10;
int dp[maxn];
int main()
{
int n,i,j,ans,num;
scanf("%d",&n);
ans=0;
for(i=1;i<=n;i++) {
scanf("%d",&num);
dp[num]=dp[num-1]+1;
ans=max(ans,dp[num]);
}
printf("%d\n",n-ans);
return 0;
}
同HDU某题类似:
dxy家收藏了一套书,这套书叫《SDOI故事集》,《SDOI故事集》有<span class="katex" style="font-size: 1.21em; font-family: KaTeX_Main; line-height: 1.2; white-space: nowrap;"><span class="katex-mathml" style="position: absolute; padding: 0px; border: 0px; height: 1px; width: 1px; overflow: hidden;">n(n\leq 19)</span><span class="katex-html" style="display: inline-block;"><span class="strut" style="display: inline-block; height: 0.75em;"></span><span class="strut bottom" style="display: inline-block; height: 1em; vertical-align: -0.25em;"></span><span class="base textstyle uncramped" style="display: inline-block;"><span class="mord mathit" style="font-family: KaTeX_Math; font-style: italic;">n</span><span class="mopen">(</span><span class="mord mathit" style="font-family: KaTeX_Math; font-style: italic;">n</span><span class="mrel" style="margin-left: 0.27778em;">≤</span><span class="mord" style="margin-left: 0.27778em;">1</span><span class="mord">9</span><span class="mclose">)</span></span></span></span>本,每本书有一个编号,从<span class="katex" style="font-size: 1.21em; font-family: KaTeX_Main; line-height: 1.2; white-space: nowrap;"><span class="katex-mathml" style="position: absolute; padding: 0px; border: 0px; height: 1px; width: 1px; overflow: hidden;">1</span><span class="katex-html" style="display: inline-block;"><span class="strut" style="display: inline-block; height: 0.64444em;"></span><span class="strut bottom" style="display: inline-block; height: 0.64444em; vertical-align: 0em;"></span><span class="base textstyle uncramped" style="display: inline-block;"><span class="mord">1</span></span></span></span>号到<span class="katex" style="font-size: 1.21em; font-family: KaTeX_Main; line-height: 1.2; white-space: nowrap;"><span class="katex-mathml" style="position: absolute; padding: 0px; border: 0px; height: 1px; width: 1px; overflow: hidden;">n</span><span class="katex-html" style="display: inline-block;"><span class="strut" style="display: inline-block; height: 0.43056em;"></span><span class="strut bottom" style="display: inline-block; height: 0.43056em; vertical-align: 0em;"></span><span class="base textstyle uncramped" style="display: inline-block;"><span class="mord mathit" style="font-family: KaTeX_Math; font-style: italic;">n</span></span></span></span>号。 dxy把这些书按编号从小到大,从上往下摞成一摞。dxy对这套书极其重视,不允许任何人动这套书。 有一天Evensgn到dxy家玩,dxy因为和妹子有约会,就让Evensgn自己待在他家。Evensgn对这套书非常好奇,偷偷的看了一下,结果发现这里面竟然有当年小E和小Q的故事。Evensgn看得出神,结果把一摞书的顺序打乱了。 眼看着dxy就要回来了,Evensgn需要尽快把这摞书恢复到原先排好序的状态。由于每本书都非常重,所以Evensgn能做的操作只有把一本书从书堆中抽出来,然后把这本书放到书堆的顶部。 给你打乱的书的顺序,你能帮Evensgn算算最少需要几次上述的操作,他才能把这套书恢复顺序?假如你能算出来的话,Evensgn答应送给你一本他签名的书《SDOI故事集9:小E的故事》
输入描述
输入包含多组数据。 第一行包含一个正整数<span class="katex" style="font-size: 1.21em; font-family: KaTeX_Main; line-height: 1.2; white-space: nowrap;"><span class="katex-mathml" style="position: absolute; padding: 0px; border: 0px; height: 1px; width: 1px; overflow: hidden;">T(T\leq 30)</span><span class="katex-html" style="display: inline-block;"><span class="strut" style="display: inline-block; height: 0.75em;"></span><span class="strut bottom" style="display: inline-block; height: 1em; vertical-align: -0.25em;"></span><span class="base textstyle uncramped" style="display: inline-block;"><span class="mord mathit" style="font-family: KaTeX_Math; font-style: italic; margin-right: 0.13889em;">T</span><span class="mopen">(</span><span class="mord mathit" style="font-family: KaTeX_Math; font-style: italic; margin-right: 0.13889em;">T</span><span class="mrel" style="margin-left: 0.27778em;">≤</span><span class="mord" style="margin-left: 0.27778em;">3</span><span class="mord">0</span><span class="mclose">)</span></span></span></span>表示数据组数。 对于每组数据,第一行为一个正整数<span class="katex" style="font-size: 1.21em; font-family: KaTeX_Main; line-height: 1.2; white-space: nowrap;"><span class="katex-mathml" style="position: absolute; padding: 0px; border: 0px; height: 1px; width: 1px; overflow: hidden;">n</span><span class="katex-html" style="display: inline-block;"><span class="strut" style="display: inline-block; height: 0.43056em;"></span><span class="strut bottom" style="display: inline-block; height: 0.43056em; vertical-align: 0em;"></span><span class="base textstyle uncramped" style="display: inline-block;"><span class="mord mathit" style="font-family: KaTeX_Math; font-style: italic;">n</span></span></span></span>表示这套《SDOI故事集》中有多少本书。 接下来一行<span class="katex" style="font-size: 1.21em; font-family: KaTeX_Main; line-height: 1.2; white-space: nowrap;"><span class="katex-mathml" style="position: absolute; padding: 0px; border: 0px; height: 1px; width: 1px; overflow: hidden;">n</span><span class="katex-html" style="display: inline-block;"><span class="strut" style="display: inline-block; height: 0.43056em;"></span><span class="strut bottom" style="display: inline-block; height: 0.43056em; vertical-align: 0em;"></span><span class="base textstyle uncramped" style="display: inline-block;"><span class="mord mathit" style="font-family: KaTeX_Math; font-style: italic;">n</span></span></span></span>个用空格分开的正整数,表示Evensgn打乱后的这摞书的书号顺序(从上往下)。
输出描述
对于每组数据,输出一行一个整数,表示Evensgn最少需要几次操作才能讲书恢复顺序。
输入样例
2 4 4 1 2 3 5 1 2 3 4 5
输出样例
3 0
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int n,a[30],book[30],t,i,j;
int _;cin>>_;
while(_--) {
cin>>n;
for(i=1;i<=n;i++) {
cin>>a[i];
if(a[i]==n) t=i;
}
n--;
for(i=t-1;i>=1;i--) {
if(a[i]==n) n--;
}
cout<<n<<endl;
}
return 0;
}