제출 #1125529

#제출 시각아이디문제언어결과실행 시간메모리
1125529AgageldiBall Machine (BOI13_ballmachine)C++20
4.84 / 100
200 ms114760 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define N 4000005 #define ff first #define ss second #define pb push_back #define sz(s) (int)s.size() #define rep(c, a, b) for(c = a; c <= b; c++) int n, t, q, m = 1, vis[N], par[N], r, dis[N]; vector <int> v[N]; set <int> ans, jog; void solve(int x) { vector <pair<int,int>> s; for(auto i : v[x]) s.pb({dis[i],i}); sort(s.begin(),s.end()); for(auto i:s) solve(i.ss); vis[m] = x; ans.insert(m); m++; } void dfs(int x) { for(auto i:v[x]) { dfs(i); dis[x] = min(dis[x],dis[i]); } dis[x] = min(x,dis[x]); } int main () { ios::sync_with_stdio(0);cin.tie(0); cin >> n >> q; for(int i = 0;i<=n;i++) { dis[i] = INT_MAX; } for(int i = 1; i <= n; i++) { int x; cin >> x; if(x) { v[x].pb(i); par[i] = x; } else r = i; } dfs(r); solve(r); par[r] = r; for(int i = 1; i <= q; i++) { int x; cin >> t >> x; if(t == 1) { for(int j = 1; j <= x; j++) { jog.insert(*ans.begin()); ans.erase(*ans.begin()); } cout << vis[*(--jog.end())] << '\n'; continue; } ans.insert(vis[x]); jog.erase(vis[x]); cout << '0' << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...