Submission #1190785

#TimeUsernameProblemLanguageResultExecution timeMemory
1190785dzuizzIndex (COCI21_index)C++20
0 / 110
24 ms540 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
constexpr int N=200005,Q=200005,P=200000,S=447;
int n,q,p[N];
pair<pair<int,int>,int> qry[Q];
int fw[N],l=0,r=-1,lf,rg,v[Q];
int sum(int idx){
  int ret=0;
  for(; idx>0; idx-=idx&-idx) ret+=fw[idx];
  return ret;
}
int sum(int l,int r){ return sum(r)-sum(l-1); }
void add(int idx, int v){ for(;idx<=P;idx+=idx&-idx) fw[idx]+=v; }
signed main(){
  ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  cin>>n>>q;
  for(int i=0;i<n;++i) cin>>p[i];
  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.first/S)&1?a.first.second>b.first.second:a.first.second<b.first.second:a.first.first<b.first.first;
  });
  for(auto&[lr,i]:qry){
    auto&[nl,nr]=lr;
    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);
    lf=1,rg=P;
    while(lf<rg){
      int mid=(lf+rg+1)>>1;
      if(sum(mid,P)>=mid) lf=mid;
      else rg=mid-1;
    }
    v[i]=lf;
  }
  for(int i=0;i<q;++i)
    cout<<v[i]<<'\n';
  return 0;
}

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