제출 #1261440

#제출 시각아이디문제언어결과실행 시간메모리
1261440nerrrmin9월 (APIO24_september)C++20
45 / 100
220 ms24608 KiB
#include "september.h" #include <vector> #define pb push_back #include<bits/stdc++.h> using namespace std; const int maxn = 5e5 + 10; int n, m; vector < int > g[maxn]; int tmr; int pos[maxn]; int a[maxn], label[maxn]; int tin[maxn], tout[maxn]; void dfs(int beg, int from) { tmr ++; a[tmr] = pos[beg]; label[beg] = tmr; tin[beg] = tmr; for (auto nb: g[beg]) { if(nb == beg)continue; dfs(nb, beg); } tout[beg] = tmr; } int t[maxn * 4]; void build(int i, int l, int r) { if(l == r) { t[i] = a[l]; return; } int mid = (l + r)/2; build(2*i, l, mid); build(2*i+1, mid+1, r); t[i] = max(t[2*i], t[2*i+1]); } int upos, uval; void update(int i, int l, int r) { if(l == r) { t[i] = uval; a[l] = uval; return; } int mid = (l + r)/2; if(upos <= mid)update(2*i, l, mid); else update(2*i+1, mid+1, r); t[i] = max(t[2*i], t[2*i+1]); } int ql, qr; int query(int i, int l, int r) { if(qr < l || ql > r)return 0; if(ql <= l && r <= qr)return t[i]; int mid = (l + r)/2; return max(query(2*i, l, mid), query(2*i+1, mid+1, r)); } int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) { n = N; m = M; for (int i = 0; i < n; ++ i) g[i].clear(); for (int i = 0; i < n; ++ i) { int par = F[i]; if(par != -1)g[par].pb(i); } for (int i = 0; i < m; ++ i) { for (int j = 0; j < n-1; ++ j) { int x = S[i][j]; pos[x] = j; } } tmr = -1; dfs(0, -1); build(1, 1, tmr); int mx = 0, day = 0; for (int i = 0; i < S[0].size(); ++ i) { int v = S[0][i]; ql = tin[v]; qr = tout[v]; int nxt = query(1, 1, tmr); mx = max(mx, nxt); if(mx == i) { day ++; mx = i + 1; } } return day; }
#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...