Оптимизировать C ++ Офлайн GCD -Blocks+ 2D Fenwick Solution для ** k ** - интересные Subarrays [закрыто]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Оптимизировать C ++ Офлайн GCD -Blocks+ 2D Fenwick Solution для ** k ** - интересные Subarrays [закрыто]

Сообщение Anonymous »

Запись о проблеме.
вам дают массив [1… n] целых числа (1 ≤ a ≤ 10^9).
Мы называем subarray [i, j] (с 1 ≤ i
  • 1 < n ≤ 5·10^4, 1 ≤ q ≤ 10^5
  • 1 ≤ a ≤ 10^9
  • В каждом запросе: 1 ≤ ℓ
    Мое решение: < /strong>
    Я реализовал следующее решение C ++, которое отвечает на каждый запрос, уменьшив к Blocks GCD и использованию автономного 2D Fenwick Tree. Это работает правильно, но TLE на самых больших тестах. Как я могу улучшить его асимптотическую сложность?#include
    #include
    #include
    #include // for std::gcd

    using namespace std;
    using ll = long long;

    /// One-dimensional Fenwick Tree (Binary Indexed Tree) supporting prefix sums
    struct Fenwick1D {
    int size;
    vector tree;

    void init(int n) {
    size = n;
    tree.assign(n + 1, 0);
    }

    // Add `value` to position `index`
    void add(int index, ll value) {
    for (; index 0; index -= index & -index)
    sum += tree[index];
    return sum;
    }
    };

    /// 2D Fenwick Tree supporting range additions and prefix sum queries
    /// over dynamic rectangular coordinates
    struct Fenwick2D {
    int size;
    vector yCoordinates; // compressed y-values per x
    vector tree1, tree2;

    void init(int n) {
    size = n;
    yCoordinates.assign(n + 1, {});
    }

    // Stage 1: collect all (x, y) coordinates that will ever be used
    void registerUpdate(int x, int y) {
    for (int i = x; i n >> q;
    vector a(n + 1);
    for (int i = 1; i > a;

    // Edge case: if the array is too small, all answers are zero
    if (n < 2) {
    while (q--) {
    int l, r, k;
    cin >> l >> r >> k;
    cout > queries.left >> queries.right >> queries.gcdThreshold;
    queries.index = i;
    }
    sort(queries.begin(), queries.end(), [](const auto &a, const auto &b) {
    return a.gcdThreshold > b.gcdThreshold;
    });

    // Step 6: Sort positive GCD blocks by descending GCD
    sort(positiveGCDBlocks.begin(), positiveGCDBlocks.end(), [](const auto &a, const auto &b) {
    return a.gcdValue > b.gcdValue;
    });

    // Step 7: Answer each query using sweeping window and 2D Fenwick tree
    vector results(q);
    int blockPointer = 0;

    auto queryRectangle = [&](int x, int y) -> ll {
    if (x

    Подробнее здесь: https://stackoverflow.com/questions/797 ... sting-suba
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Есть ли у вас интересные идеи CSS, как создать красивую файловую структуру? [закрыто]
    Anonymous » » в форуме CSS
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Зачем в Java NIO регистрировать интересные типы событий с помощью Selector?
    Anonymous » » в форуме JAVA
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • JavaScript Solution [закрыто]
    Anonymous » » в форуме Html
    0 Ответы
    52 Просмотры
    Последнее сообщение Anonymous
  • JavaScript Solution [закрыто]
    Anonymous » » в форуме CSS
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • JavaScript Solution [закрыто]
    Anonymous » » в форуме Javascript
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»