Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
27854 | M0yunAllgor1thm | 【S】T1最大后缀值个数 | C++ | 内存超限 | 70 | 328 MS | 132092 KB | 711 | 2024-03-31 11:56:09 |
#include <bits/stdc++.h> #define LL long long using namespace std; const int MAXN=1e6+5; int N; vector<int>gra[MAXN]; int w[MAXN],ans[MAXN]; int sta[MAXN],tp=0; vector<int>k[MAXN]; void dfs(int u) { while(tp&&sta[tp]<w[u]) { k[u].push_back(sta[tp]); tp--; } sta[++tp]=w[u]; ans[u]=tp; for(int i=0;i<gra[u].size();i++) dfs(gra[u][i]); tp--; for(int i=k[u].size()-1;i>=0;i--) sta[++tp]=k[u][i]; return; } int main() { scanf("%d",&N); for(int i=2;i<=N;i++) { int f; scanf("%d",&f); gra[f].push_back(i); } for(int i=1;i<=N;i++) scanf("%d",&w[i]); dfs(1); for(int i=1;i<=N;i++) printf("%d ",ans[i]); puts(""); return 0; }