제출 #985184

#제출 시각아이디문제언어결과실행 시간메모리
985184Kracken_180서열 (APIO23_sequence)C++17
28 / 100
2019 ms2097152 KiB
#include "sequence.h" #include <vector> #include <unordered_map> #include <set> #include <algorithm> #include <iostream> using namespace std; int sequence(int N, vector<int> A) { vector<unordered_map<int, int>> prefixFreq(N + 1); for (int i = 0; i < N; ++i) { prefixFreq[i + 1] = prefixFreq[i]; prefixFreq[i + 1][A[i]]++; } int maxOccurrences = 0; for (int l = 0; l < N; ++l) { multiset<int> leftSet, rightSet; unordered_map<int, int> freq; for (int r = l; r < N; ++r) { if (leftSet.empty() || A[r] <= *leftSet.rbegin()) { leftSet.insert(A[r]); } else { rightSet.insert(A[r]); } while (leftSet.size() > rightSet.size() + 1) { rightSet.insert(*leftSet.rbegin()); leftSet.erase(prev(leftSet.end())); } while (rightSet.size() > leftSet.size()) { leftSet.insert(*rightSet.begin()); rightSet.erase(rightSet.begin()); } int median1 = *leftSet.rbegin(); int median2 = (leftSet.size() + rightSet.size()) % 2 == 0 ? *rightSet.begin() : median1; freq[A[r]]++; maxOccurrences = max(maxOccurrences, freq[median1]); if (median1 != median2) { maxOccurrences = max(maxOccurrences, freq[median2]); } } } return maxOccurrences; }
#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...