Submission #1306208

#TimeUsernameProblemLanguageResultExecution timeMemory
1306208AMnuIndex (COCI21_index)C++20
110 / 110
886 ms59596 KiB
#include <bits/stdc++.h> #define fi first #define se second using namespace std; typedef pair<int,int> pii; typedef long long ll; const int MAXN = 2e5+5, SEG = MAXN*22, MAXP = 2e5; int N, Q, X, Y, cnt, val[SEG], lef[SEG], rig[SEG], ver[MAXN]; vector <int> P[MAXN]; int build(int L,int R) { int x = cnt; cnt++; if (L == R) { val[x] = 0; } else { int mid=(L+R)/2; lef[x] = build(L,mid); rig[x] = build(mid+1,R); val[x] = val[lef[x]] + val[rig[x]]; } return x; } int query(int tr,int x,int y,int L,int R) { if (x <= L && y >= R) { return val[tr]; } if (x > R || y < L) { return 0; } int mid = (L+R)/2; return query(lef[tr],x,y,L,mid) + query(rig[tr],x,y,mid+1,R); } int update(int tr,int x,int y,int L,int R) { // arr[x] = y; int c = cnt; cnt++; if (L == R) { val[c] = y; } else { int mid = (L+R)/2; if (x <= mid) { lef[c] = update(lef[tr],x,y,L,mid); rig[c] = rig[tr]; } else { lef[c] = lef[tr]; rig[c] = update(rig[tr],x,y,mid+1,R); } val[c] = val[lef[c]] + val[rig[c]]; } return c; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> N >> Q; for (int i=1;i<=N;i++) { cin >> X; P[X].push_back(i); } ver[MAXP] = build(1,N); for (int i=MAXP;i>1;i--) { for (int x : P[i]) { ver[i] = update(ver[i],x,1,1,N); } ver[i-1] = ver[i]; } while (Q--) { cin >> X >> Y; int L = 2, R = MAXP, ans = 1; while (L <= R) { int mid = (L+R)/2; if (query(ver[mid],X,Y,1,N) >= mid) { ans = mid; L = mid+1; } else { R = mid-1; } } cout << ans << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...