Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
27830 | 22级廖思学 | 【S】T1最大后缀值个数 | C++ | 运行出错 | 0 | 2 MS | 80 KB | 1087 | 2024-03-31 09:53:10 |
#include<bits/stdc++.h> using namespace std; #define int long long int a[1000010]; struct node{ long long num,ct,s[110]; }t[1000010]; int cnt; int dfs(int pos,int k){ if(pos==k){ cnt++; return t[pos].num; } if(t[pos].ct==0)return 1e18; int mmax=t[pos].num; bool flag=false; for(int i=1;i<=t[pos].ct;i++){ int ans=dfs(t[pos].s[i],k); if(!flag)mmax=max(mmax,ans); if(ans!=1e18){ flag=true;mmax=max(ans,t[pos].num); if(t[pos].num==mmax)cnt++; } cout<<ans<<" "<<mmax<<" "<<cnt<<endl; } return mmax; } signed main(){ int n;cin>>n; bool flag=false; for(int i=2;i<=n;i++){ int k;cin>>k; if(k!=i-1)flag=true; t[k].s[++t[k].ct]=i; } if(!flag){ for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<=n;i++){ int mmax=0,cnt=0; for(int j=i;j>=1;j--){ mmax=max(mmax,a[j]); if(a[j]==mmax)cnt++; } cout<<cnt<<" "; } return 0; } for(int i=1;i<=n;i++){ cin>>t[i].num; } for(int i=1;i<=n;i++){ cnt=0; dfs(1,i); cout<<cnt<<" "; } return 0; }