Submission #330763

#TimeUsernameProblemLanguageResultExecution timeMemory
330763vitkishloh228Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
64 / 100
3102 ms260408 KiB
#include<iostream> #include<vector> #include<algorithm> using namespace std; #pragma GCC optimize("Ofast") #pragma GCC optimize("no-stack-protector") #pragma GCC optimize("unroll-loops") #pragma GCC optimize("fast-math") #pragma GCC optimize("vpt") vector<vector<int>> t; vector<int> mx, ans, a; void build(int v, int l, int r) { if (l == r) { t[v] = { a[l] }; mx[v] = a[l]; ans[v] = 0; return; } int m = (l + r) >> 1; build(2 * v, l, m); build(2 * v + 1, m + 1, r); t[v].resize(t[2 * v].size() + t[2 * v + 1].size()); merge(t[2 * v].begin(), t[2 * v].end(), t[2 * v + 1].begin(), t[2 * v + 1].end(), t[v].begin()); ans[v] = max(ans[2 * v], ans[2 * v + 1]); mx[v] = max(mx[2 * v], mx[2 * v + 1]); int pos1 = lower_bound(t[2 * v + 1].begin(), t[2 * v + 1].end(), mx[2 * v]) - t[2 * v + 1].begin(); pos1--; if (pos1 >= 0) { ans[v] = max(ans[v], mx[2 * v] + t[2 * v + 1][pos1]); } } void get(int v, int tl, int tr, int l, int r, vector<int>& vert) { if (tl > tr || l > r) return; if (tl == l && tr == r) { vert.push_back(v); return; } int tm = (tl + tr) >> 1; get(2 * v, tl, tm, l, min(r, tm), vert); get(2 * v + 1, tm + 1, tr, max(l, tm + 1), r, vert); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n, q; cin >> n >> q; t.resize(4 * n); a.resize(n); mx.resize(4 * n); ans.resize(4 * n); for (int& i : a) cin >> i; build(1, 0, n - 1); while (q--) { int l, r, c; cin >> l >> r >> c; --l, --r; vector<int> vert; get(1, 0, n - 1, l, r, vert); int x = 0; for (auto v : vert) { x = max(x, ans[v]); } int curmax = t[vert[0]].back(); for (int i = 1; i < vert.size(); ++i) { int v = vert[i]; int pos1 = lower_bound(t[v].begin(), t[v].end(), curmax) - t[v].begin(); pos1--; if (pos1 >= 0) { x = max(x, curmax + t[v][pos1]); } curmax = max(curmax, t[v].back()); } if (x <= c) { cout << "1\n"; } else cout << "0\n"; } }

Compilation message (stderr)

sortbooks.cpp: In function 'int main()':
sortbooks.cpp:65:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   65 |         for (int i = 1; i < vert.size(); ++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...
#Verdict Execution timeMemoryGrader output
Fetching results...