2 条题解
-
0
子树大小
拆字符串一样,记录左右边界即可
#include<bits/stdc++.h> using namespace std; int n; int a[1006]; int ans[1006]; int find_min(int l,int r)//区间内最小值下标 { int num,mm=1e9+9; for(int i=l;i<=r;i++) { if(mm>a[i]) { mm=min(mm,a[i]); num=i; } } return num; } void dfs(int l,int r)//搜索记录当前结点子树大小 { if(l>r)return;//边界 else if(l==r) { ans[a[l]]=1; return; } int minn=find_min(l,r); ans[a[minn]]=r-l+1; dfs(l,minn-1);//左子树 dfs(minn+1,r);//右子树 } int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; dfs(1,n); for(int i=1;i<=n;i++) cout<<ans[i]<<' '; return 0; }
信息
- ID
- 1137
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 8
- 已通过
- 6
- 上传者