Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
1818 18级王浩宇 【S】T1最大后缀值个数 C++ 运行超时 70 2019 MS 11016 KB 4257 2020-11-16 10:11:10

Tests(7/10):


//#include<bits/stdc++.h> //#define v first //#define p second //#define ls (now<<1) //#define rs (now<<1|1) //#define mid ((l+r)>>1) //using namespace std; //const int N=1e6+10; //const int inf=0x3f3f3f3f; //int n,k,ans; //typedef pair<int,int> ipair; //ipair a[N],trl[N<<4],trr[N<<4]; // //ipair buildl(int now,int l,int r) //{ // if(l==r) // { // trl[now]=a[l]; // return a[l]; // } // trl[now]=min(buildl(ls,l,mid), buildl(rs,mid+1,r)); // return trl[now]; //} //ipair buildr(int now,int l,int r) //{ // if(l==r) // { // trr[now]=a[l]; // return a[l]; // } // ipair lc=buildr(ls,l,mid); // ipair rc=buildr(rs,mid+1,r); // if(lc.v==rc.v) // trr[now]=max(lc,rc); // else // trr[now]=min(lc,rc); // return trr[now]; //} //ipair queryl(int now,int l,int r,int x,int y) { // if (y < l || r < x) // { // return {inf, 0}; // } // if(x<=l && r<=y) // return trl[now]; // return min(queryl(ls,l,mid,x,y),queryl(rs,mid+1,r,x,y)); //} //ipair queryr(int now,int l,int r,int x,int y) { // if (y < l || r < x) // { // return {inf, 0}; // } // if(x<=l && r<=y) // return trr[now]; // ipair lc=queryr(ls,l,mid,x,y); // ipair rc=queryr(rs,mid+1,r,x,y); // if(lc.v==rc.v) // return max(lc,rc); // else // return min(lc,rc); //} //void dfs(ipair maxx,int l,int r) //{ // if(l>r)return; //// cout<<l<< ' '<<r<<endl; // ipair minx; // ipair lq=queryl(1,1,n,l,r); // ipair rq=queryr(1,1,n,l,r); // if(abs(lq.p-maxx.p)>abs(rq.p-maxx.p)) // minx=lq; // else // minx=rq; // if(maxx<minx) // return; // if(maxx.v+minx.v==k) // { // // if(lq.p<maxx.p && rq.p<maxx.p && queryl(1,1,n,minx.p,maxx.p)==lq) // { // ans+=(min(maxx.p,minx.p)-l+1)*(r-max(maxx.p,minx.p)+1); // dfs(maxx,minx.p+1,r); // } // else if(lq.p>maxx.p && rq.p>maxx.p && queryr(1,1,n,maxx.p,minx.p)==rq) // { // ans+=(min(maxx.p,minx.p)-l+1)*(r-max(maxx.p,minx.p)+1); // dfs(maxx,l,minx.p-1); // }else // { // ans+=(min(lq.p,rq.p)-l+1)*(r-max(lq.p,rq.p)+1); // dfs(maxx,lq.p,rq.p-1); // dfs(maxx,lq.p+1,rq.p); // } // } // else if(maxx.v+minx.v>k) // return; // else { // if(lq.p<maxx.p && rq.p<maxx.p) // { // dfs(maxx,rq.p+1,maxx.p); // } // else if(lq.p>maxx.p && rq.p>maxx.p) // { // dfs(maxx,maxx.p,lq.p-1); // }else // { // dfs(maxx,lq.p+1,rq.p-1); // } // } //} //// else if(maxx.v+minx.v==k) //// { //// ans+=(min(maxx.p,minx.p)-l+1)*(r-max(maxx.p,minx.p)+1); //// cout<<minx.p<<' '<<maxx.p<<' '<<l<<' '<<r<<endl; //// if() //// }else //// { //// if(maxx.p<minx.p) //// dfs(maxx,l,minx.p-1); //// if(maxx.p>minx.p) //// dfs(maxx,minx.p+1,r); //// } ////} //int main() //{ // scanf("%d%d",&n,&k); // for(int i=1;i<=n;i++) // { // scanf("%d", &a[i].v); // a[i].p=i; // } // buildl(1,1,n); // buildr(1,1,n); // sort(a+1,a+n+1); // int l=1,r=n; // for(int i=n;i>=1;i--) // { // dfs(a[i],l,r); // } // printf("%d",ans); // return 0; //} #include<bits/stdc++.h> using namespace std; const int N=1e6+10; int n; int fa[N],v[N]; int ans[N]; bool vis[N]; int dfs(int p) { vis[p]=true; for(int i=p;i;i=fa[i]) { if(v[i]==v[p]) ans[p]++; if(v[i]>v[p]) { if(!vis[i]) dfs(i); ans[p]+=ans[i]; break; } } return ans[p]; } int main() { scanf("%d",&n); for(int i=2;i<=n;i++) scanf("%d",&fa[i]); for(int i=1;i<=n;i++) scanf("%d",&v[i]); for(int i=1;i<=n;i++) { if(!vis[i]) dfs(i); printf("%d ",ans[i]); } return 0; }


测评信息: