(排列)给定一个1~n的排列A,你需要给出一个1~n的排列B,使得排列B的字典值最小。输出字典序最小的排列B。
输入两行,第一行一个正整数 n,
第二行n个整数表示排列 A。
提示:将问题分为n是奇数和n是偶数考虑,贪心处理。
试补全程序。
#include<bits/stdc++.h>
using namespace std;
int a[1000010];
int B[1000010];
int c[1000010];int main(){
int n;scanf("号d",&n);
for(int i=l;i<=n;i++)scanf("名d",&A[i]);
if( ① ){
int p1-0;intp2- ②;for(int i=l;i<=n;i++){
if (A[i]>n/2){B[i]=++p1;}else{B[i]=++p2;
}else{
int p1-0;int p2=n/2;
for(int i=l;i<=n;i++){
if(A[i]>_③ ){B[i]=++p1;}else{B[i]-++p2;
p1-0;p2-n/2+1;for(int i=l;i<=n;i++){if(A[i]>- ④ ){C[i]-++p1;
}else{c[i]-++p2;
int flag=0;
for(int i=l;i<=n;i++){
if(B[i]<C[i]){flag=l;break; }if(B[i]>C[i]){flag=2;break; }
⑤)swap(B,C);if(flag!=
for(int i=l;i<n;i++)printf("d ",B[i]);
printf("gd\n",Bln]);
return 0;
1处应填
n%2==0
n%2==1
n==1
n==2
2处应填
pI
n/2-1
n/2
n/2+1
3处应填
pI
n/2-1
n/2
n/2+1
4处应填
pI
n/2-1
n/2
w/2+1
5处应填
0
1
2
3
发表评论