Codeforces - Welfare State

題目鏈接: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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章