Submission #343927

#TimeUsernameProblemLanguageResultExecution timeMemory
343927flappybirdmedians (balkan11_medians)C++14
85 / 100
1094 ms11932 KiB
#include <bits/stdc++.h> using namespace std; #define MAX 302020 int l[MAX], r[MAX]; int tree[MAX]; int arr[MAX]; int s; vector<int>ans; set<int>S; void update(int loc) { ans.push_back(loc); arr[loc] = 1; S.erase(loc); loc += s - 1; while (loc > 0) { tree[loc]++; loc /= 2; } } int sumquery(int low, int high, int loc = 1) { int l, r; int ll, rr; l = (loc - (1 << (int)(log2(loc)))) << ((int)log2(s) - (int)(log2(loc))); r = l + (1 << ((int)log2(s) - (int)(log2(loc)))) - 1; rr = (l + r) / 2; ll = rr + 1; l++; r++; ll++; rr++; if (l == low && r == high) return tree[loc]; else if (rr >= high) return sumquery(low, high, loc * 2); else if (ll <= low) return sumquery(low, high, loc * 2 + 1); else return sumquery(low, rr, loc * 2) + sumquery(ll, high, loc * 2 + 1); } int minn() { return *S.begin(); } int maxn() { set<int>::iterator it; it = S.end(); it--; return *it; } int main(void) { int N; cin >> N; s = 1 << (int)ceil(log2(2 * N - 1)); int i; for (i = 1; i <= 2 * N - 1; i++) S.insert(i); int a; cin >> a; update(a); for (i = 1; i <= N - 1; i++) { cin >> a; if (arr[a] == 0) update(a); while (sumquery(1, a) < (i + 1)) update(minn()); while (sumquery(a, 2 * N - 1) < (i + 1)) update(maxn()); } for (auto i : ans) cout << i << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...