D. Permutation Transformation
題目

輸入樣例
3
5
3 5 2 1 4
1
1
4
4 3 1 2
輸出樣例
1 0 2 3 1
0
0 1 3 2
解題思路
遞回,當每次找到區間里的最大值時,以這個最大值將區間再分左邊區間和右邊區間,遞回繼續查找最大值,在每次重新磁區間時,注意已經找到最大值的下標,不能再放進去,每遞回一層那么深度就加一,而存盤陣列可以用結構體,x存讀入數的大小,y存深度,
#include <bits/stdc++.h>
#define ll long long
using namespace std;
#define sl(n) scanf("%lld",&n)
#define pl(n) printf("%lld",n)
#define pE printf("\n")
#define pb push_back
#define pre(n) for(i=0;i<n;i++)
struct node{
ll x,y;
}a[105];
void doo( ll l,ll r,ll num){
ll mx=l,i;
if(l>r)return ;
for(i=l;i<=r;i++)if(a[mx].x<a[i].x)mx=i;
a[mx].y=num;
doo(l,mx-1,num+1),doo(mx+1,r,num+1);
}
int main(){
ll t,l,r,n,i,j;
sl(t);
while(t--){
sl(n);
pre(n)sl(a[i].x),a[i].y=0;
doo(0,n-1,0);
pre(n){
pl(a[i].y);
printf(" ");
}
pE;
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/262080.html
標籤:其他
下一篇:C語言編程>第二十五周 ⑥ 請補充函式fun,該函式的功能是:統計所有小于等于x(x>2)的素數的個數,素數的個數作為函式值回傳。
