Submission #1179946

#TimeUsernameProblemLanguageResultExecution timeMemory
1179946anteknneStone Arranging 2 (JOI23_ho_t1)C++20
100 / 100
140 ms13460 KiB
#include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; typedef long long ll; typedef long double ld; #define pb push_back #define pii pair<int, int> #define pll pair<ll, ll> #define st first #define nd second #define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> #define debug false const int MAXN = 200 * 1000; int co[MAXN]; map<int, int> ile; vector<pii> v; int main () { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, a; cin >> n; for (int i = 0; i < n; i ++) { cin >> a; if (ile[a] == 0) { ile[a] ++; v.pb({a, i}); continue; } while (v.back().st != a) { ile[v.back().st] --; v.pop_back(); } ile[a] ++; v.pb({a, i}); } v.pb({a, n}); /*for (auto x : v) { cout << x.st << " " << x.nd << "\n"; }*/ for (int i = 0; i < n; i ++) { int p = 0, k = int(v.size()) - 1, wyn = 0; while (p <= k) { int sr = (p + k)/ 2; if (v[sr].nd > i) { wyn = sr; k = sr - 1; } else { p = sr + 1; } } wyn --; cout << v[wyn].st << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...