Submission #440133

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

Compilation message (stderr)

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