Submission #518312

#TimeUsernameProblemLanguageResultExecution timeMemory
518312VimmerIndex (COCI21_index)C++14
110 / 110
835 ms10056 KiB
#include <bits/stdc++.h> #define in(x) freopen(x, "r", stdin) #define out(x) freopen(x, "w", stdout) //#pragma GCC optimize("Ofast") //#pragma GCC optimize("unroll-loops") //#pragma GCC optimize("-O3") #define F first #define S second #define PB push_back #define M ll(1e9 + 7) #define sz(x) int(x.size()) #define N 200001 #define pri(x) cout << x << endl #define endl '\n' #define all(x) (x).begin(), (x).end() #define _ << " " << using namespace std; //typedef tree <ll, null_type, less_equal <ll> , rb_tree_tag, tree_order_statistics_node_update> ordered_set; //using namespace __gnu_pbds; typedef long long ll; typedef long double ld; typedef short int si; typedef unsigned long long ull; int ans[N], l[N], r[N]; const int BL = 450; int l1, l2; bool cmp(int &x, int &y) { l1 = l[x] / BL; l2 = l[y] / BL; if (l1 != l2) return l1 < l2; if (l1 & 1) return r[x] > r[y]; return r[x] < r[y]; } const int NN = 200001; int t[NN]; void add(int v) { for (; v < NN; v = v | (v + 1)) t[v]++; } void del(int v) { for (; v < NN; v = v | (v + 1)) t[v]--; } int res; void get(int v) { res = 0; for (; v >= 0; v = (v & (v + 1)) - 1) res += t[v]; } int main() { istream::sync_with_stdio(0); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // freopen("1.in", "r", stdin); int n, q, i; cin >> n >> q; int a[n]; for (i = 0; i < n; i++) cin >> a[i]; vector <int> vr; vr.clear(); for (i = 0; i < q; i++) { cin >> l[i] >> r[i]; l[i]--; r[i]--; vr.PB(i); } sort(all(vr), cmp); int ll = 0, rr = -1, all, L, R, md; for (i = 0; i < sz(vr); i++) { while (rr < r[vr[i]]) add(a[++rr]); while (l[vr[i]] < ll) add(a[--ll]); while (r[vr[i]] < rr) del(a[rr--]); while (ll < l[vr[i]]) del(a[ll++]); all = rr - ll + 1; L = 0; R = all; while (L < R) { md = (L + R + 1) >> 1; get(md - 1); if (all - res >= md) L = md; else R = md - 1; } ans[vr[i]] = L; } for (i = 0; i < q; i++) pri(ans[i]); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...