#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |