Submission #1024051

#TimeUsernameProblemLanguageResultExecution timeMemory
1024051kustizusIndex (COCI21_index)C++17
110 / 110
1428 ms16004 KiB
// #pragma GCC optimize("O3,unroll-loops") // #pragma GCC target("avx2,fma,bmi2,popcnt,lzcnt") #include <bits/stdc++.h> #define int long long using namespace std; mt19937_64 rnd(chrono::high_resolution_clock::now().time_since_epoch().count()); const int N=2e5; int n,q,block,a[N+5],ans[N+5],FT[N+5]; struct Node{ int l,r,idx; }; bool comp(Node a, Node b){ if (a.l/block!=b.l/block) return a.l/block<b.l/block; return a.r<b.r; }; void Update(int pos, int val){ for (;pos<=N;pos+=pos&(-pos)) FT[pos]+=val; } int Get(int pos){ int val=0; for (;pos;pos-=pos&(-pos)) val+=FT[pos]; return val; } vector <Node> v; void Solve(){ cin>>n>>q; for (int i=1;i<=n;++i) cin>>a[i]; for (int i=1;i<=q;++i){ int l,r; cin>>l>>r; v.push_back({l,r,i}); } block=sqrt(n); sort(v.begin(),v.end(),comp); int x=1,y=0; for (int i=0;i<q;++i){ while (x<v[i].l){ Update(a[x],-1); ++x; } while (x>v[i].l){ --x; Update(a[x],1); } while (y<v[i].r){ ++y; Update(a[y],1); } while (y>v[i].r){ Update(a[y],-1); --y; } int left=1,right=y-x+1; while (left<right){ int md=left+right>>1; if (Get(N)-Get(md)>=md+1) left=md+1; else right=md; } ans[v[i].idx]=left; } for (int i=1;i<=q;++i) cout<<ans[i]<<"\n"; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); // freopen ("FILE.INP","r",stdin); // freopen ("FILE.OUT","w",stdout); int t=1; // cin>>t; while (t--) Solve(); cerr<<"\nTIME: "<<1000*clock()/CLOCKS_PER_SEC<<"ms\n"; }

Compilation message (stderr)

index.cpp: In function 'void Solve()':
index.cpp:55:24: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   55 |             int md=left+right>>1;
      |                    ~~~~^~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...