Submission #1154441

#TimeUsernameProblemLanguageResultExecution timeMemory
1154441WongYiKaiIndex (COCI21_index)C++20
0 / 110
13 ms19264 KiB
#include <bits/stdc++.h> using namespace std; typedef int 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]}; return; } 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) { return t[v].end() - lower_bound(t[v].begin(), t[v].end(), x); } 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=1;i<=n;i++){ cin >> a[i]; } build(1, 1, n); while (q--){ ll l,r; cin >> l >> r; ll range = r-l+1; ll l2=1,r2=range; while (l2<r2){ ll m = l2+(r2-l2)/2; if (r2-l2==1) m=r2; if(query(1, 0,n-1, l, r, m) >= m) l2=m; else r2=m-1; } cout << l2 << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...