Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
1805 | 18级蔡越同 | 【S】T1最大后缀值个数 | C++ | 解答错误 | 40 | 289 MS | 19788 KB | 1137 | 2020-11-16 09:01:50 |
#include <bits/stdc++.h> using namespace std; int n,val[1000010],fa[1000010],cnt,head[1000010],ans[1000010],num; struct node{ int nxt,to; }a[1000010]; void add(int u,int v){ a[++cnt].nxt=head[u]; a[cnt].to=v; head[u]=cnt; } bool subtask; int main(){ scanf("%d",&n); fa[1]=1; for(int i=2;i<=n;i++){ scanf("%d",&fa[i]); if(fa[i]!=i-1) subtask=true; add(fa[i],i); } for(int i=1;i<=n;i++){ scanf("%d",&val[i]); } if(!subtask){ // int minn=0x3f3f3f3f; // for(int i=1;i<=n;i++){ // int ans=0,maxn=0; // for(int j=i;j>=1;j--){ // maxn=max(maxn,val[j]); // if(val[j]==maxn) ans++; // } // printf("%d ",ans); // } // cout<<endl; for(int i=1;i<=n;i++){ ans[i]=1; for(int j=i;j>=1;j--){ if(val[j]>=val[i] && j!=i){ ans[i]=ans[j]+1; break; } } printf("%d ",ans[i]); } } return 0; }