Submission #1308702

#TimeUsernameProblemLanguageResultExecution timeMemory
1308702hom84287Index (COCI21_index)C++20
110 / 110
200 ms11016 KiB
#include<bits/stdc++.h> using namespace std ; #define ff first #define ss second #define int long long typedef long long ll ; typedef pair<int,int> pii ; const int maxn = 2e5+12; const int maxk = 110 ; const int maxlg = 25 ; const int sq = 320 ; const int MOD = 998244353; const int INF = 1e17 ; int n,q,cnt[maxn],a[maxn],h,uph,ans[maxn] ; struct qee{ int l,r,num ; }qe[maxn] ; bool cmp(qee A , qee B){ if(A.l/sq==B.l/sq){ if((A.l/sq)&1) return A.r>B.r ; return A.r<B.r ; } return A.l<B.l ; } void solve(){ cin>>n>>q ; for(int i=1 ; i<=n ; i++) cin>>a[i] ; for(int i=1 ; i<=q ;i++){ cin>>qe[i].l>>qe[i].r ; qe[i].num=i ; } sort(qe,qe+q+1,cmp) ; int l=1 , r=1 ; cnt[a[1]]++ ; h=1 ; uph=1 ; for(int i=1 ; i<=q ; i++){ while(r<qe[i].r){ r++ ; cnt[a[r]]++ ; if(a[r]>=h) uph++ ; if(uph-cnt[h]>=h+1){ uph-=cnt[h] ; h++ ; } } while(qe[i].l<l){ l-- ; cnt[a[l]]++ ; if(a[l]>=h) uph++ ; if(uph-cnt[h]>=h+1){ uph-=cnt[h] ; h++ ; } } while(r>qe[i].r){ cnt[a[r]]-- ; if(a[r]>=h) uph-- ; if(uph<h){ uph+=cnt[h-1] ; h-- ; } r-- ; } while(l<qe[i].l){ cnt[a[l]]-- ; if(a[l]>=h) uph-- ; if(uph<h){ uph+=cnt[h-1] ; h-- ; } l++ ; } ans[qe[i].num]=h ; } for(int i=1 ; i<=q ; i++) cout<<ans[i]<<'\n' ; } signed main(){ ios::sync_with_stdio(0) ; cin.tie(0) ; cout.tie(0) ; solve() ; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...