n个数,p个操作,1 p x 将a[p]变为x,2 x将所有小于x的数变为x,输出最后结果。
逆向遍历一遍操作就好啦。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
vector<int>a(n);
for(int i=0;i<n;i++)
cin>>a[i];
int tt;
cin>>tt;
vector<int>op(tt);
vector<int>who(tt);
vector<int>val(tt);
for(int i=0;i<tt;i++)
{
cin>>op[i];
if(op[i]==1)
{
cin>>who[i]>>val[i];
--who[i];
}
if(op[i]==2)cin>>val[i];
}
vector<int>res(n,-1);
int mx=-1;
for(int i=tt-1;i>=0;i--)
{
if(op[i]==1)
{
if(res[who[i]]==-1)
{
res[who[i]]=max(val[i],mx);
}
}
else mx=max(mx,val[i]);
}
for(int i=0;i<n;i++)
{
if(res[i]==-1)res[i]=max(a[i],mx);
}
for(int i=0;i<n;i++)
{
if(i>0)cout<<" ";
printf("%d",res[i]);
}
}