Submission #1200183

#TimeUsernameProblemLanguageResultExecution timeMemory
1200183princeSeptember (APIO24_september)C++17
0 / 100
1 ms392 KiB
#include "bits/stdc++.h" #include "september.h" using namespace std; int solve(int n, int m, vector<int> a, vector<vector<int>> vol) { int L = n - 1; // Build position table: pos[j][x] = index of x in volunteer j's sequence vector<vector<int>> pos(m, vector<int>(n)); for (int j = 0; j < m; j++) { for (int i = 0; i < L; i++) { pos[j][ vol[j][i] ] = i; } } // Reference sequence from volunteer 0 const vector<int>& s0 = vol[0]; // For each position i in s0, compute the max and min positions across all volunteers vector<int> mx(L), mn(L); for (int i = 0; i < L; i++) { int x = s0[i]; int p_max = pos[0][x], p_min = pos[0][x]; for (int j = 1; j < m; j++) { p_max = max(p_max, pos[j][x]); p_min = min(p_min, pos[j][x]); } mx[i] = p_max; mn[i] = p_min; } // Build prefix max of mx and suffix min of mn vector<int> pref_max(L), suf_min(L); pref_max[0] = mx[0]; for (int i = 1; i < L; i++) { pref_max[i] = max(pref_max[i-1], mx[i]); } suf_min[L-1] = mn[L-1]; for (int i = L-2; i >= 0; i--) { suf_min[i] = min(suf_min[i+1], mn[i]); } // Count valid day boundaries int boundaries = 0; for (int i = 0; i + 1 < L; i++) { if (pref_max[i] < suf_min[i+1]) { boundaries++; } } // Number of days is boundaries + 1 return boundaries + 1; }
#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...