Submission #1153877

#TimeUsernameProblemLanguageResultExecution timeMemory
1153877siewjhIndex (COCI21_index)C++20
110 / 110
319 ms30308 KiB
#include <bits/stdc++.h> using namespace std; typedef tuple<int, int, int> i3; const int MAXN = 200005; int fw[MAXN], ans[MAXN]; vector<int> vec[MAXN]; int nums, queries; void update(int x, int v){ while (x <= nums){ fw[x] += v; x += (x & (-x)); } } int query(int x){ int ans = 0; while (x){ ans += fw[x]; x -= (x & (-x)); } return ans; } void dnc(int lo, int hi, int pm, vector<i3> &qv){ if (lo > hi) return; int m = (lo + hi) >> 1; for (int x = pm; x < m; x++){ for (int i : vec[x]) update(i, 1); } vector<i3> lqv, rqv; for (auto &[l, r, id] : qv){ if (r - l + 1 - (query(r) - query(l - 1)) >= m){ ans[id] = m; rqv.push_back({l, r, id}); } else lqv.push_back({l, r, id}); } dnc(m + 1, hi, m, rqv); for (int x = pm; x < m; x++){ for (int i : vec[x]) update(i, -1); } dnc(lo, m - 1, pm, lqv); } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cin >> nums >> queries; for (int i = 1; i <= nums; i++){ int x; cin >> x; x = min(x, nums); vec[x].push_back(i); } vector<i3> qv(queries); for (int i = 0; i < queries; i++){ int l, r; cin >> l >> r; qv[i] = {l, r, i}; } dnc(1, nums, 1, qv); for (int i = 0; i < queries; i++) cout << ans[i] << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...