Submission #727014

# Submission time Handle Problem Language Result Execution time Memory
727014 2023-04-19T20:05:06 Z shadow_sami Ball Machine (BOI13_ballmachine) C++14
100 / 100
384 ms 60996 KB
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
typedef long long int ll;
typedef vector<ll> vi;
typedef vector<vector<ll>> vvi;
typedef pair<ll,ll> pi;
typedef map<ll,ll> mi;
typedef long double ld;
typedef vector<ld> vd;
typedef vector<vector<ld>> vvd;
typedef pair<ld,ld> pd;
#define ff first
#define ss second
#define srt(a) sort(a.begin(),a.end());
#define fip(k, n) for (ll i = k; i < n; i++)
#define fjp(k, n) for (ll j = k; j < n; j++)
#define fin(k, n) for (ll i = k; i >= n; i--)
#define fjn(k, n) for (ll j = k; j >= n; j--)
#define fp(k, n, m) for (ll k = n; k < m; k++)
#define fn(k, n, m) for (ll k = n; k >= m; k--)
#define ordered_set tree<pi, null_type,less< pi >, rb_tree_tag,tree_order_statistics_node_update>
#define totalOne(n) __builtin_popcount(n)
#define backZero(n) __builtin_ctzll(n)
#define frontZero(n) __builtin_clzll(n)
#define fx(k) for ( auto x : k )
#define test ll t;cin >> t;while (t--)
#define nli "\n"

// ==========================(debug)============================================================================================== //

#ifndef ONLINE_JUDGE
#define debug(x) cerr << #x <<" "; _printn(x); cerr << nli;
#else
#define debug(x)
#endif

void _printn(ll x){ cerr<<x<<" "; }
void _printn(int x){ cerr<<x<<" "; }
void _printn(ld x){ cerr<<x<<" "; }
void _printn(double x){ cerr<<x<<" "; }
void _printn(string x){ cerr<<x<<" "; }
void _printn(char x){ cerr<<x<<" "; }
void _printn(bool x){ cerr<<x<<" "; }
template<class T,class V>void _printn(pair<T,V> vv);
template<class T> void _printn(vector<T> vv);
template<class T> void _printn(set<T> vv);
template<class T,class V> void _printn(map<T,V> vv);
template<class T> void _printn(multiset<T> vv);
template<class T,class V>void _printn(pair<T,V> vv){ cerr<<"( ";_printn(vv.ff);cerr<<",";_printn(vv.ss);cerr<<")";}
template<class T> void _printn(vector<T> vv){ cerr<<"[ "; for(auto xx:vv){ _printn(xx);cerr<<" "; } cerr<<"]"; };
template<class T> void _printn(set<T> vv){ cerr<<"{ "; for(auto xx:vv){ _printn(xx);cerr<<" "; } cerr<<"}"; };
template<class T> void _printn(multiset<T> vv){ cerr<<"{ "; for(auto xx:vv){ _printn(xx);cerr<<" "; } cerr<<"}"; };
template<class T,class V> void _printn(map<T,V> vv){ cerr<<"{ "; for(auto xx:vv){ _printn(xx);cerr<<" "; } cerr<<"}"; };

// ==========================(debug)============================================================================================== //

ll n,m,tp,tp2,res,cnt,sum,tptp,ans;
const ll mx = 1e5+5;
const ll mod = 1e9+7;

// ==========================(MOD)=============================================================================================== //

ll mod_add(ll aa,ll bb){ return ((aa%mod)+(bb%mod))%mod; }
ll mod_minus(ll aa,ll bb){ return (((aa%mod)-(bb%mod))+10*mod)%mod; }
ll mod_mul(ll aa,ll bb){ return ((aa%mod)*(bb%mod))%mod; }
ll mod_power(ll aa,ll bb){ aa%=mod; ll empowered = 1; bb%=mod-1; while(bb > 0){ if(bb & 1) empowered = mod_mul(empowered,aa); bb = bb >> 1; aa = mod_mul(aa,aa); } return empowered; }
ll mod_divi(ll aa,ll bb){ aa=mod_mul(aa,mod_power(bb,mod-2)); return aa; }

// ==========================(MOD)=============================================================================================== //



bool f = false;
vi adj[mx];
vector<pi> adj2[mx];
ll parent[mx][30];
set<ll> st[mx];
ll dis[mx];
ll sub[mx];
ll col[mx];
ll order[mx];
vi orderlist;

class cmp{
public:
    bool operator()(const ll aa,const ll bb){
        return order[aa] < order[bb];
    }
};

set<ll,cmp> tocol;

void dfs(ll u){
    sub[u] = u;
    fx(adj[u]){
            dis[x] = dis[u] + 1;
            dfs(x);            
            sub[u] = min(sub[x],sub[u]);
        }
    fx(adj[u])
        adj2[u].push_back({sub[x],x});
    return;
}

void dfs2(ll u){
    fx(adj2[u]){
        dfs2(x.ss);
    }
    orderlist.push_back(u);
}

int main(){
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    // #ifndef ONLINE_JUDGE
    //     freopen("input1.txt", "r", stdin);
    //     freopen("output1.txt", "w", stdout);
    //     freopen("error1.txt", "w", stderr);
    // #endif // ONLINE_JUDGE

        cin>>n>>m;
        tptp = -1;
        fip(1,n+1){
            cin>>tp;
            st[tp].insert(i);
            if(tp!=0){
                adj[tp].push_back(i);
                parent[i][0] = tp;
            }else{
                parent[i][0] = tp;
                tptp = i;
            }
        }
        parent[tptp][0] = 0;
        parent[0][0] = 0;
        fjp(1,30)
            fip(1,n+1)
                parent[i][j] = parent[parent[i][j-1]][j-1];
        dis[tptp] = 0;
        dfs(tptp);
        fip(1,n+1)
            if(adj[i].size())
                srt(adj2[i]);
        dfs2(tptp);
        fip(0,n)
            order[orderlist[i]] = i;
        fip(1,n+1){
            if(i == tptp)
                continue;
            if(adj[i].size()==0)
                tocol.insert(i);
        }
        while(m--){
            cin>>tp2;
            if(tp2==1){
                cin>>cnt;
                while(cnt && tocol.size()){
                    cnt--;
                    ll it = *tocol.begin();
                    col[it] = 1;
                    ans = it;
                    // debug(it);
                    tocol.erase(tocol.begin());
                    st[parent[it][0]].erase(st[parent[it][0]].find(it));
                    if(st[parent[it][0]].size()==0){
                        tocol.insert(parent[it][0]);
                    }
                }
                cout<<ans<<nli;
            }
            else{
                cin>>cnt;
                res = cnt;
                fin(29,0)
                    if(col[parent[cnt][i]])
                        cnt = parent[cnt][i];
                col[cnt] = 0;
                sum = dis[res] - dis[cnt];
                cout<<sum<<nli;
                tocol.insert(cnt);
                tocol.erase(parent[cnt][0]);
                st[parent[cnt][0]].insert(cnt);
            }
        }
        // cout<<"OK";
        
    // cerr << "Time elapsed: " << setprecision(6) << 1000.0 * clock() / CLOCKS_PER_SEC << "ms\n";
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 6 ms 9812 KB Output is correct
2 Correct 253 ms 36260 KB Output is correct
3 Correct 113 ms 35648 KB Output is correct
4 Correct 5 ms 9684 KB Output is correct
5 Correct 6 ms 9732 KB Output is correct
6 Correct 7 ms 10068 KB Output is correct
7 Correct 6 ms 10040 KB Output is correct
8 Correct 7 ms 10124 KB Output is correct
9 Correct 14 ms 11348 KB Output is correct
10 Correct 47 ms 16212 KB Output is correct
11 Correct 245 ms 36248 KB Output is correct
12 Correct 102 ms 35688 KB Output is correct
13 Correct 186 ms 36316 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 45 ms 19504 KB Output is correct
2 Correct 347 ms 55328 KB Output is correct
3 Correct 136 ms 48764 KB Output is correct
4 Correct 144 ms 23776 KB Output is correct
5 Correct 144 ms 23816 KB Output is correct
6 Correct 124 ms 23752 KB Output is correct
7 Correct 157 ms 22060 KB Output is correct
8 Correct 44 ms 19504 KB Output is correct
9 Correct 317 ms 55236 KB Output is correct
10 Correct 349 ms 55348 KB Output is correct
11 Correct 240 ms 55312 KB Output is correct
12 Correct 334 ms 51580 KB Output is correct
13 Correct 156 ms 54096 KB Output is correct
14 Correct 141 ms 48884 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 144 ms 32668 KB Output is correct
2 Correct 361 ms 52836 KB Output is correct
3 Correct 208 ms 50492 KB Output is correct
4 Correct 223 ms 46132 KB Output is correct
5 Correct 216 ms 46064 KB Output is correct
6 Correct 241 ms 46064 KB Output is correct
7 Correct 252 ms 43876 KB Output is correct
8 Correct 215 ms 50472 KB Output is correct
9 Correct 331 ms 55520 KB Output is correct
10 Correct 369 ms 55432 KB Output is correct
11 Correct 384 ms 55436 KB Output is correct
12 Correct 344 ms 52824 KB Output is correct
13 Correct 339 ms 60996 KB Output is correct
14 Correct 332 ms 49980 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 341 ms 55688 KB Output is correct
2 Correct 372 ms 52736 KB Output is correct
3 Correct 172 ms 60024 KB Output is correct
4 Correct 324 ms 55588 KB Output is correct
5 Correct 348 ms 55484 KB Output is correct
6 Correct 231 ms 55432 KB Output is correct
7 Correct 355 ms 52708 KB Output is correct
8 Correct 157 ms 59832 KB Output is correct
9 Correct 144 ms 48932 KB Output is correct