Submission #1144153

#TimeUsernameProblemLanguageResultExecution timeMemory
1144153AlgorithmWarriorSequence (APIO23_sequence)C++20
Compilation error
0 ms0 KiB
#include <iostream>
#include <vector>
#include <queue>
#include <unordered_map>

using namespace std;

// Clasa MedianHeap pentru a menține medianele eficient
class MedianHeap {
private:
    priority_queue<int> leftMaxHeap; // Max-heap pentru jumătatea mai mică
    priority_queue<int, vector<int>, greater<int>> rightMinHeap; // Min-heap pentru jumătatea mai mare

public:
    void insert(int num) {
        if (leftMaxHeap.empty() || num <= leftMaxHeap.top()) {
            leftMaxHeap.push(num);
        } else {
            rightMinHeap.push(num);
        }

        // Rebalansare pentru a menține echilibrul dintre cele două heap-uri
        if (leftMaxHeap.size() > rightMinHeap.size() + 1) {
            rightMinHeap.push(leftMaxHeap.top());
            leftMaxHeap.pop();
        } else if (rightMinHeap.size() > leftMaxHeap.size()) {
            leftMaxHeap.push(rightMinHeap.top());
            rightMinHeap.pop();
        }
    }

    void remove(int num) {
        if (!leftMaxHeap.empty() && num <= leftMaxHeap.top()) {
            leftMaxHeap.pop();
        } else {
            rightMinHeap.pop();
        }

        // Rebalansare
        if (leftMaxHeap.size() > rightMinHeap.size() + 1) {
            rightMinHeap.push(leftMaxHeap.top());
            leftMaxHeap.pop();
        } else if (rightMinHeap.size() > leftMaxHeap.size()) {
            leftMaxHeap.push(rightMinHeap.top());
            rightMinHeap.pop();
        }
    }

    int getMedian() {
        return leftMaxHeap.top(); // Mediană este mereu în vârful max-heap-ului
    }

    void clear() {
        while (!leftMaxHeap.empty()) leftMaxHeap.pop();
        while (!rightMinHeap.empty()) rightMinHeap.pop();
    }
};

int solveSequence(int n, vector<int>& arr) {
    int max_freq = 0;
    unordered_map<int, int> freq_map; // Pentru a stoca frecvențele medianelor

    // Parcurgem fiecare subsecvență (l, r)
    for (int l = 0; l < n; ++l) {
        MedianHeap medianHeap;
        freq_map.clear();

        for (int r = l; r < n; ++r) {
            medianHeap.insert(arr[r]);
            int median = medianHeap.getMedian();
            
            freq_map[median]++;
            max_freq = max(max_freq, freq_map[median]);
        }
    }

    return max_freq;
}

int main() {
    int n;
    cin >> n;
    vector<int> arr(n);
    for (int i = 0; i < n; ++i) {
        cin >> arr[i];
    }

    cout << solveSequence(n, arr) << endl;
    return 0;
}

Compilation message (stderr)

/usr/bin/ld: /tmp/ccDda7zS.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/cc38UGcv.o:sequence.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/ccDda7zS.o: in function `main':
grader.cpp:(.text.startup+0x2c7): undefined reference to `sequence(int, std::vector<int, std::allocator<int> >)'
collect2: error: ld returned 1 exit status