Submission #1153938

#TimeUsernameProblemLanguageResultExecution timeMemory
1153938dzuizzIndex (COCI21_index)C++20
20 / 110
2593 ms2632 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
constexpr int s=450;
int bit[200005],maxp,n;
int sum(int idx){
  int ret=0;
  for(; idx>0; idx-=idx&-idx) ret+=bit[idx];
  return ret;
}
int sum(int l,int r){
  return sum(r)-sum(l-1);
}
void add(int idx, int v){
  for(; idx<=maxp; idx+=idx&-idx) { bit[idx]+=v; }
}
signed main(){
  ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  int q; cin>>n>>q;
  int p[n]; for(auto&x:p) cin>>x,maxp=max(maxp,x);
  pair<pair<int,int>,int> qry[q];
  for(int i=0;i<q;++i){
    cin>>qry[i].first.first>>qry[i].first.second;
    --qry[i].first.first,--qry[i].first.second;
    qry[i].second=i;
  }
  sort(qry,qry+q,[&](const pair<pair<int,int>,int>&a,const pair<pair<int,int>,int>&b){
    return a.first.first/s==b.first.first/s?a.first.second<b.first.second:a.first.first<b.first.first;
  });
  int l=0,r=-1;
  int ans[q];
  for(auto&qr:qry){
    auto [nl,nr]=qr.first;
    while(l>nl)
      add(p[--l],1);
    while(r<nr)
      add(p[++r],1);
    while(l<nl)
      add(p[l++],-1);
    while(r>nr)
      add(p[r++],-1);
    int lf=1,rg=maxp;
    while(lf<rg){
      int mid=(lf+rg+1)>>1;
      if(sum(mid,maxp)>=mid) lf=mid;
      else rg=mid-1;
    }
    ans[qr.second]=lf;
    /*cout<<">> "<<qr.second<<'\n';
    for(int i=1;i<=7;++i)cout<<sum(i,i)<<" ";
    cout<<'\n';*/
  }
  for(auto&x:ans)cout<<x<<'\n';
  return 0;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...