Submission #1360206

#TimeUsernameProblemLanguageResultExecution timeMemory
1360206baoquanStone Arranging 2 (JOI23_ho_t1)C++20
100 / 100
131 ms24660 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define pa pair<int, int>
#define tup tuple<int, int, int>
#define db double
#define fi first
#define se second
#define ull unsigned long long

const int maxn = 2e5 + 4, INF = 1e17 + 4, lg = 17, base = 31, mod = 1e9 + 7;

map <int , int> mp;
int a[maxn] , lazy[4 * maxn] , st[4 * maxn];
int n;

void nhap()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n;
    for (int i = 1 ; i <= n ; i ++)
        cin >> a[i];
}

void fix(int id , int l , int r)
{
    if (!lazy[id])
        return;
    st[id] = lazy[id];
    if (l != r)
        lazy[2 * id] = lazy[2 * id + 1] = lazy[id];
    lazy[id] = 0;
}

void update(int id , int l , int r , int u , int v , int val)
{
    fix(id , l , r);
    if (v < l || r < u)
        return;
    if (u <= l && r <= v)
    {
        lazy[id] = val;
        fix(id , l , r);
        return;
    }
    int mid = (l + r) / 2;
    update(2 * id , l , mid , u , v , val);
    update(2 * id + 1 , mid + 1 , r , u , v , val);
}

int get(int id , int l , int r , int pos)
{
    fix(id , l , r);
    if (l == r)
        return st[id];
    int mid = (l + r) / 2;
    if (pos <= mid)
        return get(2 * id , l , mid , pos);
    else
        return get(2 * id + 1 , mid + 1 , r , pos);
}

void Solve()
{
    for (int i = 1 ; i <= n ; i ++)
    {
        if (mp[a[i]] && get(1 , 1 , n , mp[a[i]]) == a[i])
            update(1 , 1 , n , mp[a[i]] , i , a[i]);
        else
            update(1 , 1 , n , i , i , a[i]);
        mp[a[i]] = i;
    }
    for (int i = 1 ; i <= n ; i ++)
        cout << get(1 , 1 , n , i) << '\n';
}

signed main()
{
    nhap();
    Solve();
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...