#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e5+5;
map<int,int> mp;
stack< pair<int,int> > st;
int seg[MAXN*4],lazy[MAXN*4];
void down(int pos)
{
int val=lazy[pos];
if(!val) return ;
seg[pos*2]=seg[pos*2+1]=val;
lazy[pos*2]=lazy[pos*2+1]=val;
lazy[pos]=0;
}
void update(int l,int r,int u,int v,int val,int pos)
{
if(v<l||r<u) return ;
if(u<=l&&r<=v)
{
seg[pos]=lazy[pos]=val;
return ;
}
int mid=(l+r)/2;
down(pos);
update(l,mid,u,v,val,pos*2);
update(mid+1,r,u,v,val,pos*2+1);
}
void get(int l,int r,int pos)
{
if(l==r)
{
cout<<seg[pos]<<"\n";
return ;
}
int mid=(l+r)/2;
down(pos);
get(l,mid,pos*2);
get(mid+1,r,pos*2+1);
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int res;
cin>>res;
if(!mp[res]) update(1,n,i,i,res,1);
else
{
while(!st.empty()&&st.top().second!=res) mp[st.top().second]--,st.pop();
update(1,n,st.top().first+1,i,res,1);
}
st.push({i,res}),mp[st.top().second]++;
}
get(1,n,1);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |