Submission #1154435

#TimeUsernameProblemLanguageResultExecution timeMemory
1154435WongYiKaiIndex (COCI21_index)C++20
60 / 110
2597 ms48280 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll MAXN = 200005; vector<int> t[4*MAXN]; int a[MAXN]; void build(int v, int tl, int tr) { if (tl == tr) { t[v] = {a[tl]}; } else { int tm = (tl + tr) / 2; build(v*2, tl, tm); build(v*2+1, tm+1, tr); merge(t[v*2].begin(), t[v*2].end(), t[v*2+1].begin(), t[v*2+1].end(), back_inserter(t[v])); } } int query(int v, int tl, int tr, int l, int r, int x) { if (l > tr || tl > r) return 0; if (l <= tl && r >= tr) { vector<int>::iterator pos = lower_bound(t[v].begin(), t[v].end(), x); return t[v].end() - pos; } int tm = (tl + tr) / 2; return (query(v*2, tl, tm, l, min(r, tm), x)+ query(v*2+1, tm+1, tr, max(l, tm+1), r, x)); } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll n,q; cin >> n >> q; for (int i=0;i<n;i++){ ll temp; cin >> temp; a[i] = temp; } build(1, 0, n-1); while (q--){ ll l,r; cin >> l >> r; ll range = r-l+1; ll l2=1,r2=range+5; while (l2<r2){ ll m = l2+(r2-l2)/2; if(query(1, 0,n-1, l-1, r-1, m) >= m) l2=m+1; else r2=m; } cout << l2-1 << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...