Submission #440146

#TimeUsernameProblemLanguageResultExecution timeMemory
440146FatihSolakIndex (COCI21_index)C++17
110 / 110
2380 ms134304 KiB
#include <bits/stdc++.h> #define N 200005 using namespace std; int arr[N]; int cnt[N]; struct Node{ int sum; Node *lc,*rc; Node(int a){ sum = a; } Node(Node *a, Node *b){ sum = a->sum + b->sum; lc = a; rc = b; } }; Node* build(int l,int r){ if(l == r){ return new Node(cnt[l]); } int m = (l+r)/2; return new Node(build(l,m),build(m+1,r)); } Node* upd(Node* v,int l,int r,int pos,int val){ if(l == r){ return new Node(v->sum + val); } int m = (l+r)/2; if(pos <=m){ return new Node(upd(v->lc,l,m,pos,val),v->rc); } else return new Node(v->lc,upd(v->rc,m+1,r,pos,val)); } int mt; int get(Node* v1,Node* v2,int tl,int tr, int l){ if(tr < l){ return 0; } if(l <= tl){ return v1->sum - v2 -> sum; } mt = (tl+tr)/2; return get(v1->lc,v2->lc,tl,mt,l) + get(v1->rc,v2->rc,mt+1,tr,l); } int get(Node* v,int tl,int tr, int l){ if(tr < l){ return 0; } if(l <= tl){ return v->sum; } mt = (tl+tr)/2; return get(v->lc,tl,mt,l) + get(v->rc,mt+1,tr,l); } Node* roots[N]; int main(){ int n,q; scanf("%d%d",&n,&q); for(int i=0;i<n;i++){ scanf("%d",&arr[i]); cnt[arr[i]]++; } roots[0] = build(1,N-1); for(int i=1;i<n;i++){ roots[i] = upd(roots[i-1],1,N-1,arr[i-1],-1); } int ql,qr; int l,r,m,val; while(q--){ scanf("%d%d",&ql,&qr); ql--,qr--; l = 1,r = qr-ql+1; while(l < r){ m = (l+r+1)/2; if(qr +1 != n){ val = get(roots[ql],roots[qr+1],1,N-1,m); } else val = get(roots[ql],1,N-1,m); if(val >= m){ l = m; } else r = m-1; } printf("%d\n",l); } }

Compilation message (stderr)

index.cpp: In function 'int main()':
index.cpp:59:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   59 |     scanf("%d%d",&n,&q);
      |     ~~~~~^~~~~~~~~~~~~~
index.cpp:61:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   61 |         scanf("%d",&arr[i]);
      |         ~~~~~^~~~~~~~~~~~~~
index.cpp:71:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   71 |         scanf("%d%d",&ql,&qr);
      |         ~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...