#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define INF (1<<29) #define rep(i,n) for(int i=0;i<(int)(n);i++) #define all(v) v.begin(),v.end() #define uniq(v) v.erase(unique(all(v)),v.end()) #define indexOf(v,x) (find(all(v),x)-v.begin()) class RangeSubstituteTree {//範囲代入 int n, t; std::vector ts, val; void substitute(int a, int b, int x, int k, int l, int r) { if (r <= a || b <= l)return; if (a <= l && r <= b) { ts[k] = t; val[k] = x; return; } int m = (l + r) / 2; substitute(a, b, x, 2 * k + 1, l, m); substitute(a, b, x, 2 * k + 2, m, r); } public: RangeSubstituteTree(int n = 1 << 20) :n(n) { ts.assign(2 * n - 1, t = 0); val.assign(2 * n - 1, 0); } void substitute(int a, int b, int x) {//[a,b)にxを代入 t++; substitute(a, b, x, 0, 0, n); } int get(int k)const {//k番目の値 int res, s; k += n - 1; res = val[k]; s = ts[k]; while (k>0) { k = (k - 1) / 2; if (s> idxs; int n; cin >> n; rep(i,n) { int a; cin >> a; if (idxs.find(a) == idxs.end()) { idxs[a] = make_pair(i,i); } else { idxs[a].second = i; } } RangeSubstituteTree rst(1<<17); for (auto p:idxs) { rst.substitute(p.second.first, p.second.second + 1, p.first); } rep(i,n-1) { cout << rst.get(i) << ' '; } cout << rst.get(n - 1) << endl; }