#include <iostream> #include <algorithm> using namespace std; const int N(10003); int num[N]={0},f[N]={0}; int comp(const void *x,const void *y) { return *(int *)y-*(int *)x; } int main() { int n,m; cin>>n>>m; for(int i=n;i>=1;i--) cin>>num[i]; for(int i=1;i<=m;i++) { fill(f,f+N,0); int j; for(j=1;f[j-1]<=num[j];j++) f[j]=max(f[j-1],num[j]); int p,minx(0x7fffffff); for(int k=j-1;k>=1;k--) if(num[k]>num[j]&&minx>num[k]) minx=num[k],p=k; swap(num[p],num[j]); qsort(num+1,j-1,sizeof(int),comp); } for(int i=n;i>=2;i--) printf("%d ",num[i]); printf("%d\n",num[1]); return 0; } /************************************************************** Problem: 2247 User: admin Language: C++ Result: Accepted Time:53 ms Memory:2156 kb ****************************************************************/