Submission #1087354

#TimeUsernameProblemLanguageResultExecution timeMemory
1087354SulABouquet (EGOI24_bouquet)C++17
100 / 100
64 ms17496 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define bitcount __builtin_popcountll
using namespace std;
using namespace __gnu_pbds;
using namespace chrono;

struct segtree {
    vector<int> tree;
    int offset = 1;

    segtree(int n) {
        while (offset < n) offset <<= 1;
        tree.resize(offset << 1);
    }

    void update(int i, int x) {
        tree[i += offset] = x;
        while (i >>= 1) tree[i] = max(tree[2*i], tree[2*i + 1]);
    }

    int _query(int v, int l, int r, int ql, int qr) {
        if (ql <= l && r <= qr) return tree[v];
        if (qr < l || r < ql) return 0;
        int mid = (l+r) >> 1;
        return max({
            _query(2*v, l, mid, ql, qr),
            _query(2*v + 1, mid + 1, r, ql, qr)
        });
    }

    int query(int l, int r) {
        if (r < l) return 0;
        return _query(1, 0, offset - 1, l, r);
    }
};

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr), cout.tie(nullptr);

    int n; cin >> n;
    int l[n], r[n];
    for (int i = 0; i < n; cin >> l[i] >> r[i++]);
    int dp[n];
    vector<int> upd[n];
    segtree s(n);
    for (int i = 0; i < n; i++) {
        dp[i] = s.query(0, i - l[i] - 1) + 1;
        if (i + r[i] < n) upd[i + r[i]].push_back(i);
        for (int ind : upd[i]) {
            s.update(ind, dp[ind]);
        }
    }
    cout << *max_element(dp, dp + n);
}

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:45:46: warning: operation on 'i' may be undefined [-Wsequence-point]
   45 |     for (int i = 0; i < n; cin >> l[i] >> r[i++]);
      |                                             ~^~
#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...