Submission #1247538

#TimeUsernameProblemLanguageResultExecution timeMemory
1247538ASGA_RedSeaSeptember (APIO24_september)C++20
100 / 100
124 ms21164 KiB
/**

                                    * بسم الله الرحمن الرحيم *

                ﴾ رَبِّ اشْرَحْ لِي صَدْرِي * وَيَسِّرْ لِي أَمْرِي * وَاحْلُلْ عُقْدَةً مِّن لِّسَانِي * يَفْقَهُوا قَوْلِي ﴿

*/

/// author : "ASGA"

#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>

#include "september.h"

using namespace std;
using ll = long long;


void calc(int i,vector <vector <int>>& a,vector <int>& p,vector <int>& g){
    if(i > 0)g[i] = max(g[i],p[i]);
    for(const auto& j : a[i]){
        calc(j,a,p,g);

        if(i > 0)g[i] = max(g[i],g[j]);
    }
}

int solve(int n,int m,vector <int> f,vector <vector <int>> s){
    vector <vector <int>> a(n);
    for(int i = 1;i < n;i++){
        a[f[i]].push_back(i);
    }

    vector <vector <int>> p(m,vector <int> (n,0));
    for(int i = 0;i < m;i++){
        for(int j = 0;j < n - 1;j++){
            p[i][s[i][j]] = j;
        }
    }

    vector <vector <int>> g(m,vector <int> (n,0));
    for(int i = 0;i < m;i++){
        calc(0,a,p[i],g[i]);
    }

    int lstd = 0,pl = 0,k = 0;

    int mx = 0;

    while(lstd < n-1){
        mx = 0;
        while(1){
            for(int i = 0;i < m;i++){
                for(int j = pl;j < n-1;j++){
                    mx = max(mx,g[i][s[i][j]]);
                    if(j == mx){
                        mx = 0;
                        for(int h = pl;h <= j;h++)mx = max(mx,g[(i + 1) % m][s[i][h]]);
                        break;
                    }
                }
            }

            if(mx == lstd)break;
            lstd = mx;
        }

        lstd++;
        pl = lstd;
        k++;
    }

    return k;
}
#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...