Submission #1109547

#TimeUsernameProblemLanguageResultExecution timeMemory
1109547flyingkiteIndex (COCI21_index)C++17
110 / 110
436 ms24980 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pll pair<long long, long long> #define pb push_back #define F first #define S second #define all(x) (x).begin(), (x).end() const ll N = 2e5 + 100; const ll inf = 1e18; const ll mod = 1e9 + 7; const ll block = 450; ll n,q; ll a[N], res[N], L[N], R[N], tot[N]; vector<ll>t[N]; struct fenwick_tree{ ll n; vector<ll>ft; void init(ll _n){ n = _n; ft.clear(); ft.resize(n + 10); } void update(ll idx, ll val){ while(idx <= n) ft[idx] += val, idx += (idx & (-idx)); } ll get(ll idx){ ll res = 0; while(idx > 0) res += ft[idx], idx -= (idx & (-idx)); return res; } } ft; void para_bs(){ ft.init(2e5); for(int i = 1; i <= q;i++) tot[i] = 0; for(int i = 1; i <= n;i++){ ft.update(a[i], 1); for(auto x : t[i]){ ll j = abs(x); if(L[j] > R[j]) continue; ll mid = (L[j] + R[j]) / 2; if(x < 0) tot[j] -= ft.get(2e5) - ft.get(mid - 1); else{ if(L[j] > R[j]) continue; tot[j] += ft.get(2e5) - ft.get(mid - 1); if(tot[j] >= mid){ res[j] = mid; L[j] = mid + 1; } else R[j] = mid - 1; } } } } void to_thic_cau(){ cin >> n >> q; for(int i = 1; i <= n;i++) cin >> a[i]; for(int i = 1; i <= q;i++){ ll l,r; cin >> l >> r; t[r].pb(i); t[l - 1].pb(-i); L[i] = 1, R[i] = 2e5; } for(int i = 1; i <= 20;i++) para_bs(); for(int i = 1; i <= q;i++) cout << res[i] << '\n'; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); ll tc = 1; //cin >> tc; while(tc--) to_thic_cau(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...