Submission #1188205

#TimeUsernameProblemLanguageResultExecution timeMemory
1188205dzuizzSeptember (APIO24_september)C++20
0 / 100
2 ms3140 KiB
#include "september.h" #include <bits/stdc++.h> using namespace std; constexpr int MAXN=1e5+5; int fw[MAXN],n; vector<int> adj[MAXN]; int pre[MAXN],pos[MAXN],ss[MAXN],_ptr; void add(int idx,int d){ for(++idx;idx<MAXN;idx+=idx&-idx) fw[idx]+=d; } int sum(int idx){ int ret=0; for(++idx;idx>0;idx-=idx&-idx) ret+=fw[idx]; return ret; } int sum(int l,int r){ return sum(r)-sum(l-1); } void dfs_init(int i){ pre[i]=++_ptr; ss[i]=1; for(auto&x:adj[i]){ dfs_init(x); ss[i]+=ss[x]; } pos[i]=_ptr; } int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) { // M = 1 for(int i=1;i<N;++i) adj[F[i]].emplace_back(i); dfs_init(0); memset(fw,0,sizeof fw); int ans=0; for(int i=0,j;i<N-1;i=j){ //cout<<i<<'\n'; int x=S[0][i]; ++ans; add(pre[x],1); for(j=i+1;sum(pre[x],pos[x])<ss[x];++j){ //cout<<">> "<<sum(pre[x],pos[x])<<'\n'; if(j>=N) break; add(pre[S[0][j]],1); } } #ifdef DEBUG for(int i=0;i<N;++i){ cout<<pos[i]<<" "; cout<<sum(pre[i],pre[i])<<" "; } cout<<'\n'; #endif return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...