題目鏈接:Codeforces - Welfare State
容易想到的是,利用勢能線段樹維護lazy,或者splay維護lazy。
但是其實,我們可以發現,對於每個點,能夠影響到他的就是,最後一個對於他的單點修改以及之後的所有操作2的max。
所以對每個點找到最後一個修改的位置,然後做後綴max即可。
AC代碼:
#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=2e5+10;
int n,a[N],q,id[N],s[N];
signed main(){
cin>>n;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
cin>>q;
for(int i=1,op,p,x;i<=q;i++){
scanf("%d",&op);
if(op==1) scanf("%d %d",&p,&x),a[p]=x,id[p]=i;
else scanf("%d",&x),s[i]=x;
}
for(int i=q;i>=0;i--) s[i]=max(s[i],s[i+1]);
for(int i=1;i<=n;i++) printf("%d ",max(a[i],s[id[i]]));
return 0;
}