Submission #1081586

#TimeUsernameProblemLanguageResultExecution timeMemory
1081586asli_bgIndex (COCI21_index)C++11
110 / 110
542 ms143188 KiB
#include<bits/stdc++.h> using namespace std; //#define int long long #define fi first #define se second #define all(x) x.begin(),x.end() #define pb push_back typedef vector<int> vi; typedef pair<int,int> pii; typedef vector<pii> vii; typedef vector<bool> vb; #define sp <<' '<< #define FOR(i,a) for(int i=0;i<(a);i++) #define FORE(i,a,b) for(int i=(a);i<(b);i++) #define cont(x) {for(auto el:x) cout<<el<<' ';cout<<endl;} #define contp(x) {for(auto el:x) cout<<el.fi<<'-'<<el.se<<' ';cout<<endl;} #define DEBUG(X) { cout << #X << " = " << (X) << endl; } #define carp(x,y,mod) ((x%mod)*(y%mod))%mod #define topla(x,y,mod) ((x%mod)+(y%mod))%mod const int MAXN=2e5+5; const int INF=1e9+1; #define mid (l+r)/2 #define endl '\n' int n,q; vi a; struct Dug{ Dug *l; Dug *r; int sm; Dug(int val) : l(nullptr), r(nullptr), sm(val) {} Dug(Dug* l, Dug* r) : l(l), r(r), sm(0){ if(l) sm+=l->sm; if(r) sm+=r->sm; } Dug(Dug* kopya) : l(kopya->l), r(kopya->r), sm(kopya->sm) {} }; Dug *root[MAXN]; Dug *build(int l=1,int r=n){ if(l==r) return new Dug(0); auto sol=build(l,mid); auto sag=build(mid+1,r); return new Dug(sol,sag); } Dug *update(int pos,int val,Dug* nd,int l=1,int r=n){ if(l==r){ return new Dug(val); } if(pos<=mid){ auto sol=update(pos,val,nd->l,l,mid); return new Dug(sol,nd->r); } else{ auto sag=update(pos,val,nd->r,mid+1,r); return new Dug(nd->l,sag); } } int query(int elde,Dug *bir,Dug *iki,int l=1,int r=n){ if(l==r){ return l; } int deg=(iki->r->sm)-(bir->r->sm); if(deg>=mid+1-elde) return query(elde,bir->r,iki->r,mid+1,r); else return query(elde+deg,bir->l,iki->l,l,mid); } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin>>n>>q; a.resize(n+1); FORE(i,1,n+1) cin>>a[i]; root[0]=build(); map<int,int> cnt; FORE(i,1,n+1){ cnt[a[i]]++; root[i]=update(a[i],cnt[a[i]],root[i-1]); } while(q--){ int l,r; cin>>l>>r; cout<<query(0,root[l-1],root[r])<<endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...