Submission #1189143

#TimeUsernameProblemLanguageResultExecution timeMemory
1189143LudisseyIndex (COCI21_index)C++20
110 / 110
784 ms33924 KiB
#include <bits/stdc++.h> #define int long long #define sz(a) (int)a.size() #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() using namespace std; vector<int> t; int n; void update(int p, int val){ for (t[p+=n] += val; p > 1; p/=2) t[p/2] = t[p] + t[p^1]; } int query(int l, int r) { r++; int res = 0; for (l += n, r += n; l < r; l/=2, r/=2) { if (l&1) res += t[l++]; if (r&1) res += t[--r]; } return res; } signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int q; cin >> n >> q; vector<int> h(n); t.resize(2*n+4); vector<pair<int,int>> sh; for (int i = 0; i < n; i++) cin >> h[i]; for (int i = 0; i < n; i++) sh.push_back({h[i],i}); sort(rall(sh)); vector<pair<int,int>> que(q); vector<int> ans(q); for (int i = 0; i < q; i++) { cin >> que[i].first >> que[i].second; que[i].first--; que[i].second--; } for (int i = 0; i < q; i++) cin >> que[i].first >> que[i].second; vector<pair<pair<int,pair<int,int>>,int>> v; for (int i = 0; i < q; i++) v.push_back({{(n+1)/2,{1,n}},i}); while(sz(v)>0){ vector<pair<pair<int,pair<int,int>>,int>> v2; sort(rall(v)); for (int i = 0; i < sz(t); i++) t[i]=0; int j=0; for (int i = 0; i < sz(v); i++) { int l=v[i].first.second.first; int r=v[i].first.second.second; int mid=(l+r)/2; while(j<sz(sh)&&sh[j].first>=v[i].first.first){ update(sh[j].second,1); j++; } int qr=query(que[v[i].second].first,que[v[i].second].second); if(qr<mid){ r=mid-1; }else{ ans[v[i].second]=mid; l=mid+1; } if(l<=r){ v2.push_back({{(l+r)/2,{l,r}},v[i].second}); } } swap(v,v2); } for (int i = 0; i < q; i++) cout << ans[i] << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...