Submission #969430

#TimeUsernameProblemLanguageResultExecution timeMemory
969430AliHasanliIndex (COCI21_index)C++17
60 / 110
2530 ms46540 KiB
#include<bits/stdc++.h> using namespace std; int a[200005]; vector<int>seg[800005]; void build(int no,int l,int r) { //cout<<"B "<<no<<" "<<l<<" "<<r<<endl; if(l==r){seg[no].push_back(a[l]);return;} build(2*no,l,(l+r)/2); build(2*no+1,(l+r)/2+1,r); seg[no].resize(seg[no*2].size()+seg[no*2+1].size()); merge(seg[2*no+1].begin(), seg[2*no+1].end(), seg[2*no].begin(), seg[2*no].end(), seg[no].begin()); } int query(int n,int l,int r,int ql,int qr,int h) { //cout<<"A "<<n<<endl; if(l>r || ql>qr || r<ql || qr<l)return 0; if(ql<=l && r<=qr) { if(lower_bound(seg[n].begin(),seg[n].end(),h)==seg[n].end())return 0; int index=lower_bound(seg[n].begin(),seg[n].end(),h)-seg[n].begin(); return seg[n].size()-index; } return query(2*n,l,(l+r)/2,ql,qr,h)+query(2*n+1,(l+r)/2+1,r,ql,qr,h); } int ans(int a,int b,int n) { int answer=0; int l=1,r=200000; int mid; while(l<=r) {mid=(l+r)/2; //cout<<l<<" "<<r<<" "<<mid<<endl; if(query(1,1,n,a,b,mid)>=mid) answer=max(answer,mid),l=mid+1; else r=mid-1; } return answer; } int main() { int n,q; cin>>n>>q; for(int i=1;i<=n;i++) cin>>a[i]; build(1,1,n); //cout<<"C"<<endl; while(q--) { int a,b; cin>>a>>b; cout<<ans(a,b,n)<<endl; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...