Submission #1270730

#TimeUsernameProblemLanguageResultExecution timeMemory
1270730nguyenvietanhStone Arranging 2 (JOI23_ho_t1)C++20
100 / 100
357 ms33988 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define fi first #define se second #define pii pair<int,int> #define inp(name) freopen(name, "r", stdin); #define out(name) freopen(name, "w", stdout); const int N = 2e5 + 5; int n, q; int a[N], st[4 * N], lazy[4 * N]; void apply(int node, int v){ st[node] = lazy[node] = v; } void push(int node, int l, int r){ int v = lazy[node]; if (!v || l == r) return; apply(node * 2, v); apply(node * 2 + 1, v); lazy[node] = 0; } void update(int node, int l, int r, int lf, int rt, int v){ if (l > rt || r < lf) return; if (lf <= l && r <= rt){ apply(node, v); return; } push(node, l, r); int mid = (l + r)/2; update(node * 2, l, mid, lf, rt, v); update(node * 2 + 1, mid + 1, r, lf, rt, v); } int get(int node, int l, int r, int pos){ if (l > pos || r < pos) return 0; if (l == r) return st[node]; push(node, l, r); int mid = (l + r)/2; return get(node * 2, l, mid, pos) + get(node * 2 + 1, mid + 1, r, pos); } signed main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; map <int, vector<int>> mp; for (int i = 1; i <= n; i ++){ cin >> a[i]; mp[a[i]].push_back(i); int l = 0, r = mp[a[i]].size() - 1, res = r; //cout << i << " " << r << '\n'; while (l <= r){ int mid = (l + r)/2; if (get(1, 1, n, mp[a[i]][mid]) == a[i]){ res = mid; l = mid + 1; } else r = mid - 1; } //cout << i << " " << res << '\n'; update(1, 1, n, mp[a[i]][res], i, a[i]); } for (int i = 1; i <= n; i ++){ cout << get(1, 1, n, i) << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...