Submission #1046958

#TimeUsernameProblemLanguageResultExecution timeMemory
1046958vjudge1Index (COCI21_index)C++17
110 / 110
1937 ms36352 KiB
#include <bits/stdc++.h> using namespace std; #define all(a) a.begin(), a.end() struct segtr { vector<vector<int>> tree; int n; segtr(vector<int> const &a) : n(a.size()), tree(a.size() << 1, vector<int>()) { for (int i = 0; i < n; i++) tree[i + n].push_back(a[i]); for (int i = n - 1; i > 0; i--) { merge(all(tree[i << 1]), all(tree[i << 1 | 1]), back_inserter(tree[i])); } } int query(int l, int r, int h) { int res = 0; for (l += n, r += n + 1; l < r; l >>= 1, r >>= 1) { if (l & 1) { res += tree[l].end() - lower_bound(all(tree[l]), h); l++; } if (r & 1) { r--; res += tree[r].end() - lower_bound(all(tree[r]), h); } } return res; } int query(int l, int r) { int ll = 0, rr = r - l + 1; int ans = INT_MIN; while (rr - ll >= 0) { int m = (rr + ll) >> 1; if (query(l, r, m) >= m) { ans = max(ans, m); ll = m + 1; } else rr = m - 1; } return ans; } }; int main() { cin.tie(0)->sync_with_stdio(0); int n, q; cin >> n >> q; vector<int> a(n); for (auto &x : a) cin >> x; segtr tr(a); while (q--) { int l, r; cin >> l >> r; l--; r--; cout << tr.query(l, r) << '\n'; } }

Compilation message (stderr)

index.cpp: In constructor 'segtr::segtr(const std::vector<int>&)':
index.cpp:8:7: warning: 'segtr::n' will be initialized after [-Wreorder]
    8 |   int n;
      |       ^
index.cpp:7:23: warning:   'std::vector<std::vector<int> > segtr::tree' [-Wreorder]
    7 |   vector<vector<int>> tree;
      |                       ^~~~
index.cpp:9:3: warning:   when initialized here [-Wreorder]
    9 |   segtr(vector<int> const &a)
      |   ^~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...