Submission #1154420

#TimeUsernameProblemLanguageResultExecution timeMemory
1154420WongYiKaiIndex (COCI21_index)C++20
0 / 110
290 ms589824 KiB
#pragma GCC optimize("O3") #include <bits/stdc++.h> using namespace std; typedef long long ll; inline int readInt() { int x = 0; char ch = getchar_unlocked(); while (ch < '0' || ch > '9') ch = getchar_unlocked(); while (ch >= '0' && ch <= '9'){ x = (x << 3) + (x << 1) + ch - '0'; ch = getchar_unlocked(); } return x; } const ll MAXN = 200005, INF = 200005; vector<int> t[4*MAXN]; void build(int a[], int v, int tl, int tr) { if (tl == tr) { t[v] = vector<int>(1, a[tl]); } else { int tm = (tl + tr) / 2; build(a, v*2, tl, tm); build(a, 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 > r) return INF; if (l == tl && r == tr) { vector<int>::iterator pos = lower_bound(t[v].begin(), t[v].end(), x); if (pos != t[v].end()) return *pos; return INF; } int tm = (tl + tr) / 2; return min(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; n = readInt(); q = readInt(); int p[n+5]; for (int i=0;i<n;i++){ ll temp; temp = readInt(); p[i] = temp; } build(p, 1, 0, n-1); while (q--){ ll l,r; l = readInt(); r = readInt(); ll range = r-l+1; ll l2=0,r2=range+5; while (l2<r2){ ll m = l2+(r2-l2)/2; if(range - query(1, l-1,r-1, 0, n-1, m-1) >= 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...