Submission #562924

#TimeUsernameProblemLanguageResultExecution timeMemory
562924StickfishHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
100 / 100
837 ms63336 KiB
#include <iostream> #include <bitset> #include <random> #include <algorithm> #include <vector> using namespace std; using ll = long long; using ush = unsigned short; const ll INF = 1e9 + 177013; const int MAXN = 1e6 + 123; const int SHORT = 1 << 16; int w[MAXN]; int pv[MAXN]; int get_max(int l, int r) { int mx = -INF; int ans = 0; for (int i = l; i < r; ++i) { if (mx > w[i]) ans = max(ans, mx + w[i]); else mx = w[i]; } return ans; } void merg_add(vector<pair<int, int>>& a, pair<int, int> vl) { while (a.size() && a.back().first == vl.first) { a.pop_back(); } a.push_back(vl); } struct bitr { void resize(int n) { t.resize(n); } void maxeq(int i, int x) { while (i < t.size()) { t[i] = max(t[i], x); i |= i + 1; } } int getmx(int i) { int ans = 0; while (i >= 0) { ans = max(ans, t[i]); i &= i + 1; --i; } return ans; } private: vector<int> t; }; mt19937 rng(177013); signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int n, m; cin >> n >> m; for (int i = 0; i < n; ++i) cin >> w[i]; //while (n < 1000000) { //w[n++] = rng() % INF; //} vector<pair<int, int>> previnit = {{INF, -1}}; for (int i = 0; i < n; ++i) { while (previnit.back().first <= w[i]) { previnit.pop_back(); } pv[i] = previnit.back().second; previnit.push_back({w[i], i}); } vector<pair<pair<int, int>, pair<int, int>>> qrs(m); for (int i = 0; i < m; ++i) { int l, r, k; cin >> l >> r >> k; --l; qrs[i] = {{r, l}, {k, i}}; } sort(qrs.begin(), qrs.end()); bitset<MAXN> ans; bitr tr; tr.resize(n); int r0 = 0; for (auto [sg, msc] : qrs) { auto [r, l] = sg; auto [k, i] = msc; while (r0 < r) { if (pv[r0] != -1) { //cout << "max equal " << pv[r0] << ' ' << w[r0] + w[pv[r0]] << endl; tr.maxeq(n - pv[r0] - 1, w[r0] + w[pv[r0]]); } ++r0; } //cout << "get " << l << endl; ans[i] = tr.getmx(n - l - 1) <= k; } for (int i = 0; i < m; ++i) cout << ans[i] << '\n'; }

Compilation message (stderr)

sortbooks.cpp: In member function 'void bitr::maxeq(int, int)':
sortbooks.cpp:42:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   42 |         while (i < t.size()) {
      |                ~~^~~~~~~~~~
#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...